进程池
进程池
是一个进程的容器,可以自动创建指定数量的进程,并管理进程
当需要创建的子进程数量很大,可以使用multiprocessing模块中的Pool类
初始化Pool时,可以指定最大进程数,当有新的请求提交到Pool中,如果Pool未满,就会自动创建一个新的进程来执行该请求
如果Pool中的进程数已达最大值,那么该请求就会等待,直到Pool中有进程被释放,然后使用该进程来执行请求
进程池的两种工作方式:
同步:apply()
进程池中的进程执行有先后顺序,一个执行完毕后下一个才能执行
异步:apply_async()
进程执行没有顺序,多个进程同时执行
1.异步执行必须close,表示不再接收新的任务
2.主进程不再等待进程池执行结束后才退出,所以必须join
import multiprocessing
import time
# 执行的函数
def work():
print('work',multiprocessing.current_process())
time.sleep(0.5)
if __name__ == '__main__':
# 创建进程池
pool = multiprocessing.Pool(3)
for i in range(10):
# 同步方式执行
# pool.apply(work)
# 异步方式执行
pool.apply_async(work)
# 必须close和join
pool.close()
pool.join()