(1) Я пытаюсь использовать pool.map
, а затем pool.join()
, но python, похоже, не ждет завершения 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: []}
, как если бы python просто проигнорировал команду join
и запустил print foo
, прежде чем у нее появилась возможность запускать f
. Предполагаемый результат состоит в том, что foo
- {1:[0,1,...,99]}
, и использование обычного встроенного python map
дает этот результат. Почему печать с пул-версией {1: []}
, и как я могу изменить свой код, чтобы заставить его распечатать предполагаемый результат?
(2) В идеале я также хотел бы определить foo
как локальную переменную в main()
и передать ее в f
,
но делая это, сделав foo
первым аргументом f
и используя
pool.map(functools.partial(f, foo), range(100))
производит тот же вывод. (и, возможно, также имеет проблему, что каждый процесс теперь имеет свою собственную копию foo
?) Хотя опять же, он работает вместо обычного map
.