1. 使用map方法
import multiprocessing
import time
def f(x):
time.sleep(2)
print x
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=5)
pool.map(f, xrange(10))
- 并发5个进程
- map方法会依次将参数二数组每个元素传入参数1方法中
- 如果将map()替换为map_async(),则方法不会阻塞,而是直接执行main进程后面的代码,所以要配合pool.close()和pool.join()一起使用。close()方法是使pool不再接受新任务;join()方法是阻塞main进程等待子进程执行完成才可以运行后面code
2. 使用apply方法
import multiprocessing
import time
def func(msg):
print msg
time.sleep(1)
if __name__ == "__main__":
print 'start main-process'
pool = multiprocessing.Pool(processes=4)
for i in xrange(10):
msg = "hello %d" %(i)
pool.apply_async(func, (msg, ))
pool.close()
pool.join()
print "Sub-process(es) done."
print 'Main-process done.'
- apply_async和apply方法区别是前者不会阻塞main进程,需要用pool.close()和join()方法阻塞等待子进程执行。
- apply与map方法相比,它只是调用方法和参数,而map方法会将数组参数迭代传给被调用方法
- pool.apply_async(func, (msg, )) 这行msg后面的逗号是不能省略的,否则不会执行func方法
--end