进程池,多进程堵塞、异步非堵塞

当需要很多进程时,把进程全部创建需要消耗很多资源,进程池的就是把创建的进程循环利用

from multiprocessing.pool import Pool
import time
import os

def fun():
    time.sleep(2)
    print(1)
    print(os.getpid())
if __name__ == '__main__':
    p = Pool(3) # 默认进程数为cpu核数
    for i in range(10):
        # p.apply_async(fun,args=(i,)) # 异步非堵塞,args(i,)是向fun()传递参数
        p.apply_async(fun)  # 异步非堵塞
        # p.apply(fun) # 堵塞
    p.close() # 关闭进程池
    p.join() # 等待子进程执行结束,再往后执行,没有这句会直接打印 end,不会执行fun函数
    print('end')
    print(os.getpid()) # 主进程号和进程池中的子进程号不一样

当使用异步非堵塞apply_async时:

from multiprocessing.pool import Pool
import time
import os

def fun(a):
    time.sleep(2)
    print(a)
    print(os.getpid())
if __name__ == '__main__':
    p = Pool(3) # 默认进程数为cpu核数
    for i in range(10):
        p.apply_async(fun,args=(i,)) # 异步非堵塞,args(i,)是向fun()传递参数
        # p.apply_async(fun)  # 异步非堵塞
        # p.apply(fun,args=(i,)) # 堵塞
    p.close() # 关闭进程池
    p.join() # 等待子进程执行结束,再往后执行,没有这句会直接打印 end,不会执行fun函数
    print('end')

有join()的执行结果
在这里插入图片描述
---------------------------------------分割线-----------------------------------------

from multiprocessing.pool import Pool
import time
import os

def fun(a):
    time.sleep(2)
    print(a)
    print(os.getpid())
if __name__ == '__main__':
    p = Pool(3) # 默认进程数为cpu核数
    for i in range(10):
        p.apply_async(fun,args=(i,)) # 异步非堵塞,args(i,)是向fun()传递参数
        # p.apply_async(fun)  # 异步非堵塞
        # p.apply(fun,args=(i,)) # 堵塞
    p.close() # 关闭进程池
    # p.join() # 等待子进程执行结束,再往后执行,没有这句会直接打印 end,不会执行fun函数
    print('end')

没有join()的执行结果
在这里插入图片描述
---------------------------------------分割线-----------------------------------------

堵塞apply

from multiprocessing.pool import Pool
import time
import os

def fun(a):
    time.sleep(2)
    print(a)
    print(os.getpid())
if __name__ == '__main__':
    p = Pool(3) # 默认进程数为cpu核数
    for i in range(10):
        # p.apply_async(fun,args=(i,)) # 异步非堵塞,args(i,)是向fun()传递参数
        # p.apply_async(fun)  # 异步非堵塞
        p.apply(fun,args=(i,)) # 堵塞
    p.close() # 关闭进程池
    # p.join() # 等待子进程执行结束,再往后执行,没有这句会直接打印 end,不会执行fun函数
    print('end')

当使用堵塞apply时的执行结果在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值