Python 进程池

进程池可以提供指定数量的进程给用户使用,当有新的请求提交到进程池中时,如果进程池未满,则会创建一个新的进程执行该请求;如果进程池中的进程数已经达到了设置的最大值,那么该请求就会等待,等进程池中有进程空余下来就会执行该任务

Python multiprocessing 模块提供了 Pool() 函数,专门用来创建一个进程池

multiprocessing 模块中表示进程池的类是 multiprocessing.pool.Pool 类。该类中提供了一些和操作进程池相关的方法

  • apply_async(func[, args[, kwds]]) :使用非阻塞方式调用func(并行执行,堵塞方式必须等待上一个进程退出才能执行下一个进程),args为传递给func的参数列表,kwds为传递给func的关键字参数列表;
  • apply(func[, args[, kwds]]):使用阻塞方式调用func
  • close():关闭Pool,使其不再接受新的任务;
  • terminate():不管任务是否完成,立即终止;
  • join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后使用;
multiprocessing.Pool( processes )

process参数用于指定进程池中包含的进程数,如果为None则默认使用os.cpu_count()返回的数字(根据本地CPU个数决定,process小于等于本地的cpu个数)

from multiprocessing import Pool
import time
import os
def test(arg='jibu'):
    print(arg,' --当前进程:',os.getpid())
    time.sleep(3)
if __name__ == '__main__':
    #创建包含 4 条进程的进程池
    pool = Pool(processes=4)
    # 将action分3次提交给进程池
    pool.apply_async(test)
    pool.apply_async(test, args=('jibu', ))
    pool.apply_async(test, args=('jibu', ))
    pool.apply_async(test, kwds={'arg': 'jibu'})
    pool.close() #关闭进程池,关闭后po不再接收新的请求
    # 等待po中所有子进程执行完成,必须放在close语句之后
    pool.join()

结果
jibu  --当前进程: 7508
jibu  --当前进程: 12392
jibu  --当前进程: 2876
jibu  --当前进程: 13360

我们也可以使用 with 语句来管理进程池,这样的话我们无需手动调用 close() 方法关闭进程池

from multiprocessing import Pool
import time
import os
def test(arg='jibu'):
    print(arg,' --当前进程:',os.getpid())
    time.sleep(3)
if __name__ == '__main__':
    with Pool(processes=4) as pool:
        result = pool.map(test, ('jibu', 'zhangsan', 'lisi'))
    for arc in result:
        print(arc)

结果
jibu  --当前进程: 3444
zhangsan  --当前进程: 8500
lisi  --当前进程: 12708
None
None
None

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季布,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值