python中的进程池:multiprocessing.Pool()

python中的进程池:
我们可以写出自己希望进程帮助我们完成的任务,然后把任务批量交给进程池
进程池帮助我们创建进程完成任务,不需要我们管理。


进程池:利用multiprocessing 下的Pool能够创建进程池
Pool(n) 传入一个n能够开一个能容纳n个进程任务的进程池。
如果不传入参数,或者传入负数 能开一个动态控制大小的进程池

具体的使用方法如下:提醒大家要认真看注释
 1 from multiprocessing import Pool
 2 import os,time,random
 3 #绑定给进程工作的函数
 4 def work(num):
 5     t1 = time.time()
 6     print("阻塞%s开始,pid:%s"%( num , os.getpid() ))
 7     time.sleep(random.random()*2)
 8     t2 = time.time()
 9     print("阻塞%s结束,消耗时间%.2f"%( num,t2 - t1 ))
10 
11 def work2(num):
12     t1 = time.time()
13     print("非阻塞%s开始,pid:%s" % (num, os.getpid()))
14     time.sleep(random.random() * 4)
15     t2 = time.time()
16     print("非阻塞%s结束,消耗时间%.2f" % (num, t2 - t1))
17 
18 if __name__ == "__main__":
19     # p = Pool(3) #开启一个能开三个任务进程的进程池
20     # for i in range(10):
21     #     #非阻塞的调用func,第二个参数是进程帮我们调用work的时候调的参数表
22     #     #p.apply_async( work , (i,))
23     #     #以阻塞的形式产生进程任务,生成一个任务进程,等它执行完出池第二个进程才会闯进进池,主进程一直在这里阻塞等待
24     #     p.apply( work,(i,) )
25     #     print(i)
26     # print("开始")
27 
28     p = Pool(50)
29     for i in range(20):
30         # 非阻塞提交,我们发现,直接丢20个任务给进程池,
31         # 主进程就不管了,会继续向下执行代码,进程池帮我们管理,把20个执行完
32         p.apply_async(work2, (i,)  )
33 
34     for i in range(10):
35         p.apply(work , (i, ) )
36 
37     #关闭进程池,不再接收其他任务
38     p.close()
39 
40     # join就是阻塞等待所有任务执行完再继续
41     #主进程会卡在这里,等所有进程结束再继续执行
42     #一定更要先关闭进程池 才能阻塞等待
43     p.join()
44     print("结束")

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值