进程池 - downtiser/python-one GitHub Wiki
进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止
#Downtiser
import multiprocessing
import os, time
def run(n):
print('this is process',os.getpid())
time.sleep(2)
return n+1
def back(args):
print('the process %s call the function!'%os.getpid(),args)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=5) #进程池中最多同时存在5个活动的进程
for i in range(10):
pool.apply_async(run, args=(i,), callback=back) #callback指定回调函数
pool.close()
pool.join()
pool有两个启用进程的方法,apply
和 apply_async
,前者实现的的串行的效果,后者实现并发的效果.还要注意,要先关闭进程池,再等待池内进程运行完毕.其中回调函数是在进程完成指定函数后将结果传递给回调函数再执行回调函数,并且回调函数都是在主进程一个进程中执行的,所以可以显著提升程序运行效率.