在Anaconda python中使用带有maxtasksperchild参数的pool时,为什么imap_unordered的输出比输入更长?

时间:2019-10-21 14:37:49

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

我有一个函数,有一个参数,它也是返回值。与此函数一起使用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时会出现这种行为吗?

0 个答案:

没有答案