我正在尝试构建一个并行运行多个进程的 python 脚本。基本上,这些进程是独立的,在不同的文件夹上工作,并将它们的输出作为文本文件保留在这些文件夹中。但在某些特殊情况下,进程可能会以特殊(布尔)状态终止。如果是这样,我希望所有其他进程立即终止。做这个的最好方式是什么?
在阅读了 Doug Hellmann 的优秀教程后,我已经摆弄了 multiprocessing.condition() 和 multiprocessing.manager:http: //pymotw.com/2/multiprocessing/communication.html 但是,我似乎不明白如何获得一个多处理进程,用于监视状态指示器并在它采用特殊值时退出。
为了举例说明这一点,我编写了下面的小脚本。它在某种程度上做了我想要的,但以异常结束。非常欢迎就更优雅的方式提出建议:
兄弟,格罗
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()