私はスレッドに参加する目的を理解しています。リソースの使用について質問しています。ここでの具体的な使用例は、長時間実行しているスレッドが多数のスレッドを生成する必要があり、操作中に終了したかどうかを確認してから、それらをクリーンアップすることです。メインスレッドはinotifyイベントを待機し、それに基づいてスレッドを生成するので、inotify呼び出しでブロックする必要があるため、join()
呼び出しをブロックできません。Pythonのスレッドは、漏れを防ぐために結合する必要がありますか?
私はpthreadsをして、例えば、終了したスレッドに参加しないことは、リソースリークが発生することを知っている:
でpthread_join(3):結合可能であるスレッドに参加するために失敗する(すなわち、ある1分離されない)、「ゾンビ糸」を生成する。各ゾンビスレッドがいくつかのシステムリソースを消費し、十分なゾンビスレッドが蓄積されたら、新しいスレッド(またはプロセス)を作成することはもはや不可能になるため、これを避けてください。
Pythonのドキュメントでは、このようなことは言及されていませんが、多くのスレッドが通常の操作中に結合されずに終了することが予想される場合、join()は問題なく無視できます。
私は単に私のスレッドリストを取得し、次の操作を行うことができます私は、思ったんだけど:各チェックについて
threads = [thread for thread in threads if thread.is_alive()]
、またはこのリークはだろうか?または私は次のことをしなければならないのですか?
alive_threads = list()
for thread in threads:
if thread.is_alive():
alive_threads.append(thread)
else:
thread.join()
threads = alive_threads
Pythonスレッドは、基盤となるシステムスレッドモデルの抽象レイヤーなので、[ソースコード](https://svn.python.org/projects/python/tags/r32/Lib/threading)をチェックするのが最善でしょう。 py)を使ってクリーンアップがすでに完了しているかどうかを確認します。 –
ええ、ブロックだけではないように見えますが、将来のすべてのバージョンのPythonの安定した前提として、それに頼ることができるかどうかを知りたがっています。 – Taywee