我尝试以这种方式使用多处理:
from multiprocessing import Pool
added = []
def foo(i):
added = []
# do something
added.append(x[i])
return added
if __name__ == '__main__':
h = 0
while len(added)<len(c):
pool = Pool(4)
result = pool.imap_unordered(foo, c)
added.append(result[-1])
pool.close()
pool.join()
h = h + 1
多处理发生在 while 循环中,在 foo
函数中,
将创建added
列表。在循环h
的每个后续步骤中,列表added
应按后续值递增,并且应在函数foo
中使用当前列表added
。是否可以在循环的每个后续步骤中将列表的当前内容传递给函数?因为在上面的代码中,foo
函数每次都从头开始创建added
列表的新内容。如何解决这个问题?
您可以使用multiprocessing.Queue
. 粗略的想法是在主进程中构造其中一个,将其传递给子进程,每个foo()
调用都可以调用put(x[i])
向队列添加值。
然后,主进程将读取队列以收集结果。