リファレンスを端から端まで読み込んではいないのですが、どんな実装になるかを考える前に・・・
worker1が処理を終えてから一定時間内にworker2が処理を終えられなかったとき、もう一度最初からやるとのことですが、このとき動作中のworker2のキャンセル方法が気になります。
自前でthreading.Eventや割り込みフラグ等を用いて「割り込まれたら実行中の処理をできるだけ早く中断する」というような割り込み受領をworkerに実装しなければならないのではないでしょうか。ただI/Oがからんでくると少々面倒なことになると思います。例えば時間がかかる同期I/Oのように処理が完了するまで呼び出し元スレッドをブロックするようなものを用いる場合、一旦それを始めると割り込みフラグのチェックが行えなくなるため、その処理が(正常終了またはタイムアウトで)完了してからようやく割り込みチェックが行えます。それゆえキャンセルを要求されても実際に処理を中断するまで相応の待ち時間が必要になるという問題が起きる気がします。しかしそうしたものがなくひたすら計算しかしないような場合は処理のあちこちに割り込みチェックを入れ込んだり、一つのworkerで行うべき仕事を複数の短時間の計算に分割してそれらをThreadPoolでスケジュールすればよいかも知れません。いずれにしても「割り込まれることを意識せずにworker側の処理を実装する」のは難しい気がします。「待ちが生じてもかまわない」あるいは「キャンセル自体しなくてもいい」という考え方でいいのなら話は簡単ですが・・・おそらくそうしたことは「できるだけ避けたい」のではないでしょうか?
スレッドではなく複数のプロセスで並列処理を行うということであればworker(プロセス)へシグナルを発すれば簡単にキャンセルできると思います。
質問者さんはこのあたりどうお考えでしょうか?すでに考慮済みならよいですがひょっとしたらまだ検討しておられないかと思いコメントしてみました。
間違いなどありましたらご容赦ください(ご指摘などいただければ幸いです)。