【发布时间】:2014-01-21 18:47:11
【问题描述】:
(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 命令并在它有机会运行f 之前运行了print foo。预期的结果是foo 是{1:[0,1,...,99]},并且使用普通的内置python map 给出了这个结果。为什么池化版本打印{1: []},如何更改我的代码以使其打印预期结果?
(2) 理想情况下,我还想将foo 定义为main() 中的局部变量并将其传递给f,
但是通过将foo 设为f 的第一个参数并使用
pool.map(functools.partial(f, foo), range(100))
产生相同的输出。 (并且可能还存在每个进程现在都有自己的foo 副本的问题?)虽然同样,它使用普通的map 来代替。
【问题讨论】:
标签: python python-2.7 multiprocessing