python多进程的坑,Python进程池Pool 解决Python 进程池Pool中一些坑

想了解解决Python 进程池Pool中一些坑的相关内容吗,qq_41131535在本文为您仔细讲解Python进程池Pool的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Python,进程池Pool,下面大家一起来学习吧。

1 from multiprocessing import Pool,Queue。

其中Queue在Pool中不起作用,具体原因未明。

解决方案:

如果要用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue,

与multiprocessing中的Queue不同

q=Manager().Queue()#Manager中的Queue才能配合Pool

po = Pool() # 无穷多进程

2 使用进程池,在进程中调用io读写操作。

例如:

p=Pool()

q=Manager().Queue()

with open('/home/cctv/data/stage_file/stage_{}.txt'.format(int(time.time())), 'w') as w1:

p.apply_async(write_json, args=(video_path, 0,0.6,w1,q,i[0],))

这样也不会完成进程,只能把w放到具体的函数里面,不能通过参数调用

补充:python3进程池pool使用及注意事项

1.在python中使用进程池主要就是为了并行处理任务,缩短运行时间

2.经常使用方法: 同步有 apply(), map();异步的有 apply_async(), map_async()

3. 先看几个小例子

import time

from multiprocessing import Pool

test = [1,2,3,4,5,6,7,8]

def run(fn):

time.sleep(1)

return fn*fn

s = time.time()

for i in test:

run(i)

e = time.time()

print('直接循环 执行时间:',e - s)

pool = Pool(8)

s = time.time()

for i in test:

pool.apply(run, (i,))

e = time.time()

print('apply 执行时间:',e - s)

pool1 = Pool(8)

s = time.time()

res = []

for i in test:

r = [pool1.apply_async(run, (i,))]

res.append(r)

pool1.close()

pool1.join()

e = time.time()

print([i.get() for i in r])

print('apply_async 执行时间:',e - s)

pool2 = Pool(8)

r = pool2.map(run,test)

pool2.close()

pool2.join()

e1 = time.time()

print(r)

print('map执行时间:',e1 - e)

pool3 = Pool(8)

pool3.map_async(run,test)

pool3.close()

pool3.join()

e1 = time.time()

print('map_async执行时间:',e1 - e)

执行结果

直接循环 执行时间: 8.004754781723022

apply 执行时间: 8.016774654388428

[64]

apply_async 执行时间: 1.1128439903259277

[1, 4, 9, 16, 25, 36, 49, 64]

map执行时间: 1.181443452835083

map_async执行时间: 2.3679864406585693

除此之外,在写代码中,还涉及到变量的一些问题。就需要加锁~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值