进程池

当需要创建的子进程数量不多时,我们可以直接利用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,会导致进程池中的任务不会被执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值