在尝试并行化任务时,我尝试执行以下操作:
for i in multiprocessing.Pool().imap(myfun, range(0,10)):
print("iterating")
print(i)
所有任务均成功执行,但程序从未终止,没有任何指令挂起。
然后我尝试了这种看似相同的变化
p = multiprocessing.Pool()
for i in p.imap(myfun, range(0,10)):
print(i)
,令我惊讶的是,它成功终止了。下面我有一个在python 3.7中实现的这种行为的最小工作示例。
据我所知,multiprocessing.Pool().imap(myfun, range(0,10))
分配后,p.imap(myfun, range(0,10)
和p = multiprocessing.Pool()
之间应该没有区别,但这似乎证明我错了。
为什么会这样?我是否不正确理解multiprocessing.Pool()的工作方式?这是我找不到参考的已知错误吗?
工作示例:
#!/usr/bin/env python3.7
import multiprocessing
def myfun(p):
return p
p = multiprocessing.Pool()
for i in p.imap(myfun, range(0,10)):
print(i)
print("DONE!"*50)
for i in multiprocessing.Pool().imap(myfun, range(0,10)):
print("iterating")
print(i)
print("Done!")