因为我在Pool()。imap()挂起,p.imap()终止

时间:2018-12-18 16:06:57

标签: python python-3.x python-multiprocessing

在尝试并行化任务时,我尝试执行以下操作:

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!")

0 个答案:

没有答案