複数のプロセスまたはスレッドにまたがる Python スクリプトを考えてみましょう (どちらにするかはまだ決めていません。まだ実験中です)。作成された時点よりも後で生成されたすべてのプロセス/スレッドに参加したいと思います。その目的のために、リストをスレッド プールとして使用しています。
pool = []
for job in jobs:
j = Process(target=some_Function, args=(some_Arg, ))
j.start()
pool.append(j)
# Lots of code
for p in pool:
p.join()
do_Right_Before_Exiting()
sys.exit()
このアプローチの問題は、非常に多くのプロセスがあり、プールがメモリ リークのように動作することです。プールをなくすとかなりのメモリが節約されますが、プロセスを確実に終了させる方法がありません。「ハック」しsleep(30)
て完了する時間を与えることもできますが、これは醜く信頼性が低いと思います。
コードが実行されている場所以外のポイントにプロセス/スレッドを参加させるにはどうすればよいですか (おそらく C# ラベルのようなものに参加するか、別のイベントに参加します)? または、すべてのプロセス/スレッドが完了したことを確認してから続行するにはどうすればよいですか?