あなたがn個のスレッドのループを持っていて、それらをタイムアウトtで1つずつ結合すると、実際の時間はn * tです。なぜなら、1人の子供のタイムアウトカウントの開始threadは最後の子スレッドの終了時刻です。この合計時間をn * tでないtに減らす方法はありますか?タイムアウト付きのPythonマルチスレッドジョイン
2
A
答えて
1
はい、あなたは絶対的なタイムアウトを計算し、すべての参加前に、あなたの残りの相対タイムアウトを再計算することができます
# Join the_threads, waiting no more than some_relative_timeout to
# attempt to join all of them.
absolute_timeout = time.time() + some_relative_timeout
for thr in the_threads:
timeout = absolute_timeout - time.time()
if timeout < 0:
break
thr.join(timeout)
if thr.isAlive():
# we timed out
else:
# we didn't
さて、* *このを行う必要がありますかどうかが少し不透明です。 "デーモン"ワーカースレッドが他の手段(グローバル状態テーブル、完了メッセージのキューへのプッシュなど)で完了を伝える方が良いかもしれません。
0
スレッドに参加する理由は、呼び出しスレッドが結合されたスレッドが終了するのを待つためです。子スレッドが(意図的にまたは未処理例外のために)終了すると、親のjoin()
呼び出しが返されます。
すべての子スレッドに参加してからタイムアウトが完了するのを待っている場合、メインスレッドは実際にjoin()
のポイントを尊重していません。子スレッドが終了するまで実行を停止します。
タイムアウトで子スレッドが完了すると予想される場合、メインスレッドはフルタイムアウトを待つ必要はありません。子スレッドがタイムアウトより長く動作し、子スレッドの実行中に親スレッドの実行を停止させたくない場合は、なぜ子を親にするのですか?join()
?
関連する問題
- 1. pythonシリアル書き込みタイムアウト
- 2. Pythonタイムアウト
- 3. Pythonコルーチンのタイムアウト
- 4. Pythonマルチプロセッシングプールのタイムアウト
- 5. フラスコ付きPythonと非アクティブ期間が経過した後のMySQLのタイムアウト
- 6. Pythonのurllib2のタイムアウト
- 7. リアクティブ・ストリーム - タイムアウト付きバッチ処理
- 8. jQuery:通知機能付きタイムアウト/遅延?
- 9. Node.jsタイムアウト付き非同期iteratee
- 10. タイムアウト付きAngularJSサービス関数 - 返信
- 11. Python - TKinter "タイムアウト"
- 12. エラー:421タイムアウト添付
- 13. Pythonのurllib2の要求タイムアウト
- 14. Windows(Python)の関数のタイムアウト
- 15. はタイムアウトのVimeoのPythonモジュール
- 16. 最長のフレーズ - Pythonのタイムアウト
- 17. Python-memcache接続タイムアウト
- 18. python-kafkaプロデューサのタイムアウトがuwsgiのpythonアプリケーション
- 19. PythonでのRTMP接続タイムアウト
- 20. のpythonロックと文とタイムアウト
- 21. Pythonのタイムアウト問題itertools.combinations()
- 22. データアダプタのアップデートを使用した.NETでのACEタイムアウト付きExcel
- 23. リストボックス(チェックボックス付き)Python
- 24. メソッド付きPythonソケット
- 25. メモ付きのPythonビルドグラフ
- 26. シード付きのPythonランダムシーケンス
- 27. Pythonの条件付きログ
- 28. 条件付きのPythonループ
- 29. ケース付きのPython map()
- 30. Pythonのsubprocess.check_output(±)文字付き
私の場合、すべての子スレッドに対してタイムアウトがあります。このタイムアウトでは、親スレッドはブロックし、子スレッドを待機します。このタイムアウトの後、子スレッドが終了したかどうかに関係なく、親スレッドは実行を継続します。 –