私はQueueクラスにjoin()できますが、呼び出しがまだ戻っていない場合はしばらくしてからタイムアウトしたいと考えています。 これを行うにはどうすればよいですか?キュー\をメタクラスを使ってサブクラス化することで可能ですか?PythonのQueue.join()にタイムアウト引数を追加する
12
A
答えて
17
サブクラスおそらく最も良い方法はです。このような何かが(未テスト)動作するはずです:
def join_with_timeout(self, timeout):
self.all_tasks_done.acquire()
try:
endtime = time() + timeout
while self.unfinished_tasks:
remaining = endtime - time()
if remaining <= 0.0:
raise NotFinished
self.all_tasks_done.wait(remaining)
finally:
self.all_tasks_done.release()
0
最初に、あなたがスレッドにキューのコードをラップすることができ、task_done()
とキュー出口ですべての作業スレッドがQueue
でタイムアウト機能を実装するためにことを確認する必要がありますし、使用してこのスレッドのタイムアウトを追加します
テストされていない例Thread.join([timeout])
は、私が提案する何を概説する
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
def queuefunc():
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.setDaemon(True)
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
t = Thread(target=queuefunc)
t.start()
t.join(100) # timeout applies here
10
は(参加)方法がすべて完了するすべてのタスクを待っている程度です。あなたは、タスクが実際に完了したかどうか気にしない場合は、あなたが定期的に未完成のタスク数をポーリングすることができます
stop = time() + timeout
while q.unfinished_tasks and time() < stop:
sleep(1)
をタスクが実行されたとき、またはタイムアウト期間が経過したときに、このループは存在します。
レイモンド
関連する問題
- 1. Pythonスクリプトで外部の引数を追加するには?
- 2. Python 3のサブクラスに引数を追加する方法
- 3. python-daemonにコマンド引数を追加するには?
- 4. 既存のNSPredicateに追加の引数を追加する
- 5. GraphQLリクエストに引数を追加する
- 6. ループに引数(post_status)を追加する
- 7. Python Selenium WebDriver(url)関数を取得するタイムアウトを追加する方法
- 8. 関数の追加引数
- 9. goarのargparse引数を追加する
- 10. たDatagramSocketにタイムアウトを追加 - )(
- 11. Jythonで引数を追加PythonInterpreterを "execfile"関数に追加
- 12. \ rまたは\ n Pythonの引数リストに追加
- 13. 渡す追加引数
- 14. jsonpコールバック関数に複数のパラメータ/引数を追加する
- 15. Android ViewModelの追加引数
- 16. 変数が動作しないショートカットベースの引数に引数を追加する
- 17. PyCharmテスト追加の引数にシェルコマンドを追加
- 18. UITableViewのターゲット#selectorに複数の引数を追加する
- 19. PythonのDBUS - 次のように `Pythonの3 DBUSモジュールで追加の引数
- 20. Pythonとargparse:最初の引数に基づいて必要な追加引数を変更する方法は?
- 21. Pythonのマジックメソッドの追加で複数の引数を受け入れる方法
- 22. 関数に2番目の引数を追加する
- 23. ファイルを指す変数にCMDライン引数を追加する
- 24. 追加の引数に「connectionArgs」リレーJS
- 25. XcodeのCircleCIビルドにタイムアウトを追加
- 26. ルビコードで接続タイムアウトを追加する
- 27. RestTemplateでタイムアウトを追加する方法
- 28. Python argparseは、引数の前に余分なスペースを追加します。
- 29. Python Popenは現在のディレクトリを引数に追加していますか?
- 30. http関数の追加引数Golang
あなたは、すべてのワーカースレッドが(task_doneで終わることを保証するだろう) – tuergeist