Python 进程池
1.进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。进程池设置最好等于CPU核心数量
from multiprocessing import Pool import time def myfunc(i): time.sleep(2) return i+1000 def callback_func(args): # 参数为上一个函数的返回值 print('callback %s'%args) if __name__ == '__main__': p = Pool(5) for i in range(10): p.apply_async(func=myfunc,args=(i,),callback=callback_func) p.close() # 关闭进程池,进程池的进程还会继续执行 p.join()
进程池的方法
-
apply(func[, args[, kwds]]) :使用arg和kwds参数调用func函数,结果返回前会一直阻塞,由于这个原因,apply_async()更适合并发执行,另外,func函数仅被pool中的一个进程运行。
-
apply_async(func[, args[, kwds[, callback[, error_callback]]]]) : apply()方法的一个变体,会返回一个结果对象。如果callback被指定,那么callback可以接收一个参数然后被调用,当结果准备好回调时会调用callback,调用失败时,则用error_callback替换callback。 Callbacks应被立即完成,否则处理结果的线程会被阻塞。
-
close() : 阻止更多的任务提交到pool,待任务完成后,工作进程会退出。
-
terminate() : 不管任务是否完成,立即停止工作进程。在对pool对象进程垃圾回收的时候,会立即调用terminate()。
-
join() : wait工作线程的退出,在调用join()前,必须调用close() or terminate()。这样是因为被终止的进程需要被父进程调用wait(join等价与wait),否则进程会成为僵尸进程。
apply 每个任务排队执行:进程.join()
apply_async 每个任务并发进行:可以设置回调函数:进程无.join(),进程daemon = True(主进程不会等子进程)

浙公网安备 33010602011771号