Python многопроцессорный пул, присоединиться; не ждет, чтобы продолжить?
(1) яя пытаюсь использоватьpool.map
с последующимpool.join()
, но питон не делаеткажется, ждуpool.map
закончить, прежде чем пройти мимоpool.join()
, Вот'простой пример того, что ямы пробовали:
from multiprocessing import Pool
foo = {1: []}
def f(x):
foo[1].append(x)
print foo
def main():
pool = Pool()
pool.map(f, range(100))
pool.close()
pool.join()
print foo
if __name__ == '__main__':
main()
Распечатка просто{1: []}
, как будто питон просто проигнорировалjoin
командовать и побежалprint foo
прежде чем он имел возможность бежатьf
, Ожидаемый результат заключается в том, чтоfoo
является{1:[0,1,...,99]}
и используя обычный встроенный питонmap
дает этот результат. Почему печатается пул версия{1: []}
и как я могу изменить свой код, чтобы он печатал намеченный результат?
(2) В идеале ятакже хотел бы определитьfoo
в качестве локальной переменной вmain()
и передать егоf
, но делает это, делаяfoo
первый аргументf
и используя
pool.map(functools.partial(f, foo), range(100))
производит тот же результат. (и, возможно, также имеет проблему, что каждый процесс теперь имеет свою собственную копиюfoo
?) Хотя, опять же, он работает с использованием обычногоmap
вместо.