初始化Pool时,可以指定⼀个最⼤进程数,
当有新的请求提交到Pool中时, 如果池还没有满,那么就会创建⼀个新的进程⽤来执⾏该请求;
但如果池中 的进程数已经达到指定的最⼤值,那么该请求就会等待,直到池中有进程结 束,才会创建新的进程来执行
from multiprocessing import Pool
import os
import random
import time
def worker(num):
for i in range(5):
print("===pid=%d==num=%d="%(os.getpid(), num))
time.sleep(1)
#3表示 进程池中对多有3个进程一起执行
pool = Pool(3)
for i in range(10):
print("---%d---"%i)
#向进程池中添加任务
#注意:如果添加的任务数量超过 进程池中进程的个数的话,那么不会导致添加不进入
# 添加到进程中的任务 如果还没有被执行的话,那么此时 他们会等待进程池中的
# 进程完成一个任务之后,会自动的去用刚刚的那个进程 完成当前的新任务
pool.apply_async(worker, (i,))
#pool.apply(worker, (i,))#堵塞的方式
pool.close()#关闭进程池,相当于 不能够再次添加新任务了
pool.join()#主进程 创建/添加 任务后,主进程 默认不会等待进程池中的任务执行完后才结束 而是 当主进程的任务做完之后 立马结束,,,如果这个地方没join,会导致 进程池中的任务不会执行
pool.join()#主进程 创建/添加 任务后,主进程 默认不会等待进程池中的任务执行完后才结束 而是 当主进程的任务做完之后 立马结束,,,如果这个地方没join,会导致 进程池中的任务不会执行