我有一个函数,有一个参数,它也是返回值。与此函数一起使用imap_unordered时,其输出比传递给imap_unordered的iterable更长。这怎么可能?我使用Anaconda python 3.6.5,而在标准python 3上,此问题不存在。
这是整个脚本的代码:
from multiprocessing import Pool
def func(i):
return i
iterable = [i for i in range(20)]
counter = 0
with Pool(4,maxtasksperchild=2) as p:
for out in p.imap_unordered(func,iterable):
counter += 1
print(counter)
现在是输出:
1
2
3
4
5
6
7
8
9
10
9
10
11
12
13
14
15
16
17
18
19
20
为什么数字的输出不是线性增长的? (请查看9,10,9,10
,应为9,10,11
)
首先,我认为问题出在imap_unordered函数上,因为它不按顺序返回其输出,但是那不是真的,因为脚本不打印映射函数的输出,而只是打印计数器变量的值,应该每次循环增加1。这只是普通循环,每次迭代后某些变量将增加1。
好吧,当不使用maxtasksperchild
参数时,输出是正确的。
有人知道为什么在使用maxtasksperchild
时会出现这种行为吗?