0

2 種類のスレッド クラスを生成するプロセスがあります。1 つのスレッドが job_queue の消費を担当します (通常、このクラスの 100 スレッドが実行されます)。そして 2 番目のスレッドは kill スレッドです。thread2 から設定されている result_done フラグを使用しています。問題は、threads1 が X 秒間待機してから、result_done フラグが設定されているかどうかを確認することです。

def run(self):
    while True:
        try:
            val = self.job_queue.get(True,self.maxtimeout) 
        except:
            pass
        if self.result_done.isset():
            return

ここで、maxtimeout を 500 秒に設定し、別のスレッドから result_done フラグを設定すると、このスレッドは終了する前に 500 秒間待機します (キューにデータがない場合)。

私が達成したいのは、プロセスのいずれかのスレッドから result_done イベントが設定されるとすぐに、すべてのスレッドが現在のプロセスとともに正常に終了し、db、websocket、http 接続などを適切に終了することです。

これらのスレッドを生成するプロセスを作成するために、Python マルチプロセス ライブラリを使用しています。

更新: すべてのスレッドは daemon=True スレッドです。

4

1 に答える 1

0

待ち時間を避けるために、次のメソッドmaxtimeoutを使用できます。Event.wait()

def run(self):
    while not self.result_done.is_set():
        try:
            val = self.job_queue.get_nowait()
        except Empty:
            if self.result_done.wait(1): # wait a second to avoid busy loop
                return 

Event.wait(timeout)timeout呼び出し中にイベントが設定された場合、完全に待機せずに戻ります。

于 2014-03-12T10:16:29.580 に答える