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."
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()