解决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
0
投稿
猜你喜欢
- 名称空间名称空间(namespaces):用于存放名字与内存地址绑定关系的地方,是对栈区的划分作用:名称空间可以使栈区中存放相同的名字,从而
- 如何用通过Web访问OLAP数据? <% Set Conn=Server.CreateObject(″A
- 本文借鉴于张广河教授主编的《数据结构》,对其中的代码进行了完善。从某源点到其余各顶点的最短路径Dijkstra算法可用于求解图中某源点到其余
- zipfile模块是python中一个处理压缩文件的模块,解决了不少我们平常需要处理压缩文件的需求。大家还知道Python zipfile
- python可以编写win程序。win程序的格式是exe,下面我们就来看一下使用python编写exe程序的方法。编写好python程序后p
- 代码如下:--执行顺序 From Where Select select * from (select sal as salary,comm
- LDA(Latent Dirichlet allocation)模型是一种常用而用途广泛地概率主题模型。其实现一般通过Variational
- 本文实例讲述了python实现京东订单推送到测试环境,提供便利操作。分享给大家供大家参考,具体如下:# -*- coding: utf-8
- sql server的备份与恢复(查询分析器) 查询分析器: 命令: 1:备份数据库命令: backup database whdb1(要备
- 本人非计算机,亦非心理学,或者交互设计,更非设计专业出身,因此什么都是半桶水。即使如此,依然靠着兴趣寻找乐趣。对于设计,爱之,但没有受过系统
- 本文实例讲述了Python数据分析之获取双色球历史信息的方法。分享给大家供大家参考,具体如下:每个人都有一颗中双色球大奖的心,对于技术人员来
- 前言目前学习python几个月了,由于自己比较喜欢跑马拉松,已经跑过了很多场比赛,前些天就写了个简单的爬虫爬取了网上三千多场马拉松比赛的报名
- 安装 NumPy如果你已经在系统上安装了 Python 和 PIP,那么安装 NumPy 非常容易。请使用这条命令安装它:C:\Users\
- 用于绘制直线的line函数;用于绘制椭圆的ellipse函数;用于绘制矩形的rectangle函数;用于绘制圆的circle函数;用于绘制填
- 本文以实例形式简述了Python实现字符串排序的方法,是Python程序设计中一个非常实用的技巧。分享给大家供大家参考之用。具体方法如下:一
- 最近入了一块树莓派,想让其实现摄像头的调用,因此写下此博客备忘一、树莓派网络的配置首先,对树莓派进行网络配置,否则就无法进行软件的安装我们知
- Python列表的append()方法踩坑在这之前,我一直认为append()只是个将一个对象添加到列表尾部的方法,但是今天之后,我对它有了
- 代码如下:create table T_NEWS ( ID NUMBER, N_TYPE VARCHAR2(20), N_TIT
- 如何截取字符函数在工作中我们经常会遇到某种情况需要截取字符串中某个特定标签之间的内容(爬虫可能用到的较多),适用于很多情况例如字符串形式的x
- 基于pygame的飞机大作战小游戏,适合新手,不能直接运行,只能在命令行进入当前游戏目录,输入python game.py才能够运行,尚不知