解决Python 进程池Pool中一些坑

 更新时间:2021年03月05日 10:04:18   作者:qq_41131535  
这篇文章主要介绍了解决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

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

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

相关文章

  • python selenium 执行完毕关闭chromedriver进程示例

    python selenium 执行完毕关闭chromedriver进程示例

    今天小编就为大家分享一篇python selenium 执行完毕关闭chromedriver进程示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python三大神器之fabric使用教程

    python三大神器之fabric使用教程

    fabric 是一个python包 是一个基于ssh的部署工具包,这篇文章主要介绍了python三大神器之fabric,需要的朋友可以参考下
    2019-06-06
  • python中validators库的使用方法详解

    python中validators库的使用方法详解

    这篇文章主要介绍了python中validators库的使用方法详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • python搜索指定目录的方法

    python搜索指定目录的方法

    这篇文章主要介绍了python搜索指定目录的方法,涉及Python操作目录的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Python实现json对值进行模糊搜索的示例详解

    Python实现json对值进行模糊搜索的示例详解

    我经常使用json进行存储配置,于是常常遇到这样的问题:如果想要对某个数组里的值进行模糊搜索,同时输出相关的其他数组相同位置的的值该如何实现呢?本文就来和大家详细聊聊
    2023-01-01
  • Python画图实现同一结点多个柱状图的示例

    Python画图实现同一结点多个柱状图的示例

    今天小编就为大家分享一篇Python画图实现同一结点多个柱状图的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 基于Python开发一个文件快速搜索工具

    基于Python开发一个文件快速搜索工具

    这篇文章主要为大家详细介绍了如何基于Python开发一个文件快速搜索工具,可以实现多条件文件搜索并实时搜索状态反馈,需要的可以参考一下
    2025-03-03
  • python中关于property的最详细使用方法

    python中关于property的最详细使用方法

    这篇文章主要介绍了python中关于property的最详细使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Python机器学习实战之k-近邻算法的实现

    Python机器学习实战之k-近邻算法的实现

    k-近邻算法采用测量不同特征值之间的距离方法进行分类。这篇文章主要为大家介绍了如何通过python实现K近邻算法,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • 浅谈Python之Django(三)

    浅谈Python之Django(三)

    这篇文章主要介绍了Python3中的Django,小编觉得这篇文章写的还不错,需要的朋友们下面随着小编来一起学习学习吧,希望能够给你带来帮助
    2021-10-10

最新评论