2017-03-16 4 views
0

プールオブジェクトのclose()メソッドを使用してプールワーカーを正常に停止したいのですが、terminate()は10秒後に実行を終了しません。タイムアウトでマルチスレッドスレッドプールが閉じます

started_at = int(time.time()) 
p.close() # this is blocking 
if (int(time.time()) - started_at >= 10): 
    p.terminate() 

このようなものです。何か案が? :)

私はまた、スレッドにSIGTERMを送信することについて考えましたが、それらは同じpidを共有していますので、これを行うことはできません。

+0

申し訳ありませんが、それは私の場合はThreadPoolのです。それを固定する –

答えて

1

スレッドプールを使用している場合は、グローバル変数(stopthreadsなど)を使用できます。

ワーカースレッドは、多くの場合、終了し、それがTrueに設定されている場合、この変数を検査しなければならないで実行されている機能(複数可):

def worker(data): 
    while True: 
     if stopthreads: 
      return None 
     # do other things 
0

私は最初に質問をしなかったようです。

あなたは多分ちょうどp.terminate()を呼び出し、例えばapply_asyncを使用して、他のプロセスにp.close()コールを送り、そしてapply_asyncコールが時間内に完了していないかどうかを確認することができます。

apply_asyncの詳細については、docsを参照してください。

関連する問題