当需要创建的子进程数量不多时,我们可以直接利用multiporcessing中的Process动态生成 多个进程,但是如果现在有100个任务需要处理,那我们需要多少个子进程呢,如果我们创 建100个子进程也可以实现,但是资源比较浪费。我们也可以创建指定个数个子进程,例如 只创建10个子进程,让着10个子进程重复的执行任务,这样就节约了资源。
所以我们就需要一个进程池 Pool
直接上代码 ,只能在linux中执行
#Pool 进程池
from multiprocessing import Pool
import os
import time
def worker(num):
for i in range(5):
print("===pid={}===num={}=".format(os.getpid(),num))
time.sleep(1)
#3表示 进程池中对所有3个进程一起执行
pool=Pool(3)
for i in range(10):
print("-----{}----".format(i))
#向进程池中添加任务
#如果添加的任务数量超过了 进程池中进程的个数的话,那么不会导致添加不进入
#添加到进程中的任务 如果还没有被执行的话,那么此时 他们会等待进程池中的
#进程完成一个任务之后,会自动的去用刚刚的进程,完成当前新的任务
pool.apply_async(worker,(i,))#非堵塞
#pool.apply(worker,(i,))#堵塞
# pool.close()#关闭进程池 相当于 不能够在此添加新任务
# pool.join()#堵塞主进程完成
#主进程创建添加任务后,主进程 默认不会等待进程池中的任务执行完后才结束
#而是 档主进程 的任务做完之后 立马结束, 如果这个地方没有join,会导致进程池中的任务不会被执行