複数のプロセスを並行して実行する Python スクリプトを作成しようとしています。基本的に、プロセスは独立しており、異なるフォルダーで動作し、それらの出力をそれらのフォルダーにテキスト ファイルとして残します。ただし、特殊なケースでは、プロセスが特別な (ブール値の) ステータスで終了することがあります。もしそうなら、他のすべてのプロセスをすぐに終了させたいです。これを行う最善の方法は何ですか?
Doug Hellmann による優れたチュートリアルを読んだ後、multiprocessing.condition() と multiprocessing.manager をいじりました : http://pymotw.com/2/multiprocessing/communication.htmlステータスインジケータを監視し、特別な値をとった場合に終了するマルチプロセッシングプロセス。
これを例証するために、以下の小さなスクリプトを作成しました。それは私が望むことをいくらかしますが、例外で終わります。より洗練された進め方に関する提案を歓迎します:
br、グロ
import multiprocessing
def input(i):
"""arbitrary chosen value(8) gives special status = 1"""
if i == 8:
value = 1
else:
value = 0
return value
def sum_list(list):
"""accumulative sum of list"""
sum = 0
for x in range(len(list)):
sum = sum + list[x]
return sum
def worker(list,i):
value = input(i)
list[i] = value
print 'processname',i
if __name__ == '__main__':
mgr = multiprocessing.Manager()
list = mgr.list([0]*20)
jobs = [ multiprocessing.Process(target=worker, args=(list,i))
for i in range(20)
]
for j in jobs:
j.start()
sumlist = sum_list(list)
print sumlist
if sumlist == 1:
break
for j in jobs:
j.join()