Почему imap_unordered имеет более длинный вывод, чем ввод при использовании пула с параметром maxtasksperchild в Python Anaconda? - PullRequest
0 голосов
/ 21 октября 2019

У меня очень функция с одним аргументом, который также является возвращаемым значением. Когда imap_unordered используется с этой функцией, ее выходные данные длиннее, чем итерируемые, переданные imap_unordered. Как это возможно? Я использую 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...