There is code and unit test duplication for the longbow() and recovery() methods. The try except blocks in the longbow and recovery methods that handle the user interrupt are identical. This code should be moved up to the launcher() scope where it will feature just once.
Doing this will require refactoring the code slightly so that the jobs structure is in the scope of launcher, it will need passing in to longbow() as part of parameters.