Python multiprocessing里面的Pool.map和Pool.join区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python multiprocessing里面的Pool.map和Pool.join区别相关的知识,希望对你有一定的参考价值。

Pool.map和Pool.join必须同时调用吗?我跑了一段测试代码发现加不加join都没有影响,哪位能给解释下这两个的区别,以及为什么要一起用
# coding: utf-8
import multiprocessing
import time,os

def func(msg):
print msg, 'pid is 0'.format(os.getpid())
time.sleep(3)
print 'end%s' % (os.getpid())

if __name__ == "__main__":
pool = multiprocessing.Pool(processes=3)
'''
for i in xrange(4):
msg = 'hello'
pool.apply_async(func, (msg,)) # 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
'''
a = range(10)
ss=pool.map(func,a)

print "Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~"
pool.close()
#pool.join() # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
print "Sub-process(es) done."

参考技术A 没有必然的联系,pool.join(),是防止子进程还没运行完,主进程就退出了。追问

map貌似也是堵塞的,我map没跑完的时候,也没有打印主程序的内容,join那句加不加我确实没看出来区别……

参考技术B 是的,必须联合使用:
from multiprocessing import Pool

foo = 1: []

def f(x):
return x

def main():
pool = Pool()
foo[1] = pool.map(f, range(100))
pool.close()
pool.join()
print foo

if __name__ == '__main__':
main()追问

我试了一下你的代码,join加不加并没有区别……

以上是关于Python multiprocessing里面的Pool.map和Pool.join区别的主要内容,如果未能解决你的问题,请参考以下文章

Python简单多进程multiprocessing.Pool类

python多进程multiprocessing模块中Queue的妙用

彻底搞懂python执行multiprocessing Pool线程池程序报错RuntimeError:reeze_support()

python多进程multiprocessing

Python multiprocessing

Python进程之multiprocessing模块