进程池Pool
进程池Pool
方法:
Pool(processes = 0):创建进程池对象。processes是可选参数,设置进程池的进程数量。
apply_async(function, *args, **kwargs):异步的方式添加进程事件。
使用方法同Process函数,function是目标函数,*args是星号元组形参,**kwargs是星号字典形参。
close():关闭进程添加事件的通道。有些地方说是关闭进程池,本人不这么认为,因为close后,不论是父进程还是子进程都仍然在继续执行,直到所有进程运行完毕。
join():阻塞函数,等待进程池的进程执行完毕。代码里必须添加这个,否则父进程结束,子进程也会中断。
get():进程池可以有返回值,通过该方法获取返回值。
示例1,没有返回值的:
from multiprocessing import Pool import time def work(msg): time.sleep(5) print(msg) if __name__=="__main__": p = Pool(processes = 4) for x in range(0,10): msg = "this is {0} time".format(x) #msg = "this is %d time" %x print(x) p.apply_async(work, (msg,)) p.close()#关闭父进程添加事件的通道 p.join()#必须加这个,否则父进程结束,子进程都会中断 print("main end")
示例2,有返回值的:
from multiprocessing import Process from multiprocessing import Pool from time import sleep def work(x): res = "this is result:%d" %x return res if __name__=="__main__": result = list() for x in range(0, 10): p = Pool(processes = 4) result.append(p.apply_async(work, (x,))) p.close() p.join() for x in result: print("here is jieshou:", x.get()) print("main end")