Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。
下面介绍一下multiprocessing 模块下的Pool类下的几个方法
import multiprocessing
def do_calculation(data):
return data*2
def start_process():
print 'Starting',multiprocessing.current_process().name
if __name__=='__main__':
inputs=list(range(10))
print 'Inputs :',inputs
builtin_output=map(do_calculation,inputs)
print 'Build-In :', builtin_output
pool_size= 3
print pool_size
pool=multiprocessing.Pool(processes=pool_size,
initializer=start_process,)
pool_outputs=pool.map(do_calculation,inputs)
pool.close()
pool.join()
print 'Pool :',pool_outputs
Inputs : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Build-In : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
3
Starting PoolWorker-257
Starting PoolWorker-258
Starting PoolWorker-259
Pool : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
import multiprocessing
import time
def func(msg):
for i in xrange(3):
print msg
time.sleep(1)
return "done " + msg
if __name__ == "__main__":
pool = multiprocessing.Pool(processes=4)
result = []
for i in xrange(4):
msg = "hello %d" %(i)
result.append(pool.apply_async(func, (msg, )))
pool.close()
pool.join()
for res in result:
print res.get()
print "Sub-process(es) done."
hello 0
hello 2
hello 1
hello 3
hello 0
hello 2
hello 1
hello 3
hello 0
hello 1
hello 2
hello 3
done hello 0
done hello 1
done hello 2
done hello 3
Sub-process(es) done.
这个也不错
http://blog.csdn.net/seetheworld518/article/details/49639651