解决Python 进程池Pool中一些坑
作者:qq_41131535 发布时间:2023-12-21 00:24:31
标签: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
除此之外,在写代码中,还涉及到变量的一些问题。就需要加锁~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/qq_41131535/article/details/89706178


猜你喜欢
- 前言在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在
- 1.1 方法归纳使用 + 直接将多列合并为一列(合并列较少);使用pandas.Series.str.cat方法,将多列合并为一列(合并列较
- 先看看 allure 命令的帮助文档cmd 敲allure -hallure 命令的语法格式allure [options] [comman
- 以上是效果图,本图表使用d3.js v4制作。图表主要功能是在六边形格子中显示数据,点击底部图标可以切换指定格子高亮显示,图表可以随浏览器任
- 在数据处理的时候,尤其在搞大数据竞赛的时候经常会遇到一个问题就是,多个表单的合并问题,比如一个表单有user_id和age这两个字段,另一个
- 内置数据类型在编程中,数据类型是一个重要的概念。变量可以存储不同类型的数据,并且不同类型可以执行不同的操作。在这些类别中,Python 默认
- 在使用Python的过程中,一定是离不开数据结构的, 也就是List-列表,Tuples-元组,Dictionaries-字典。那实际应用中
- 早期写的python障碍式期权的定价脚本,供大家参考,具体内容如下#coding:utf-8'''障碍期权q=x/s
- 如何用OdbcRegTool组件来创建一个数据源?OdbcRegTool是一个免费组件,在服务器上安装后,就可以来创建一个数据源:<h
- 本文实例讲述了thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能。分享给大家供大家参考,具体如下:Loader::action
- 好久没有写ASP代码了,今天在做一个简单的留言本时,出现了一下错误: Microsoft Office Access Database En
- JDBC连接MySQL数据库关键的四个步骤1、查找驱动程序MySQL目前提供的Java驱动程序为Connection/J,可以从MySQL官
- 存储文件的重要一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,。 默认数据是加载到
- 打包pyinstaller 02.py --noconsole --hidden-import PySide2.QtXml报错0:The &
- 本文实例讲述了python实现根据图标提取分类应用程序,分享给大家供大家参考。具体方法如下:#!/usr/bin/python # -*-
- 问题你想读写一个二进制数组的结构化数据到Python元组中。解决方案可以使用 struct 模块处理二进制数据。 下面是一段示例代码将一个P
- 在我们设计网页的时候,总会遇到一些不愉快的事情,最常见的莫过于在后台添加内容后才发现显示的页面被撑开,导致网页极度不美观。以前大
- 下载的数据是pascal voc2012的数据,已经有annotation了,不过是xml格式的,训练的模型是在Google模型的基础上加了
- 字典dict1 = {'name':'han','age':18,'class
- 通过学习私有函数与私有变量,可以更好的完善 类的开发 ,从而丰满我们的场景与实现方案。什么是私有函数和私有变量私有函数与私有变量中的私有是什