python多进程Pool使用遇到的坑

环境

windows10 + python3.7.3 + PyCharm

代码

from multiprocessing import Pool

def f(x):
    return x * x
p = Pool(5)
if __name__ == '__main__':
    p.map(f,  [1,2,3])
    p.close()
    p.join()

上面代码中有没有closejoin并不影响最后的结果

错误处

Pool在使用上未放入if __name__ == '__main__':中,可以将上述代码改成下面这样即可正常运行

from multiprocessing import Pool

def f(x):
    return x * x

if __name__ == '__main__':
    p = Pool(5)  # 放到这里
    print(p.map(f,  [1,2,3]))
    p.close()
    p.join()

另外,一定要加if __name__ == '__main__':这一句,否则报错。
推荐使用Pool的方式为:

with Pool(5) as p:
    print(p.map(f, [1, 2, 3]))

参考资料

  • python3.7官方文档
  • python并行编程书籍
  • python并行编程书籍关于Pool给的参考

你可能感兴趣的:(冬季穿棉袄)