Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么python多线程和队列无助于加速读取大量文件?

为什么python多线程和队列无助于加速读取大量文件?
EN

Stack Overflow用户
提问于 2012-04-06 01:34:02
回答 2查看 413关注 0票数 0

我正在编写一个Python程序,以便从本地文件系统读取110000+文本文件并将其推送到MongoDB中。这是我的代码片段。

EmailProducer类(threading.Thread):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def __init__(self, threadID, queue, path):
    self.threadID = threadID
    self.queue = queue
    self.path = path
    threading.Thread.__init__(self)

def run(self):
    if (queue.empty()):
        files = os.listdir(self.path)
        print(len(files))
        for file in files:
            queue.put(file)

EmailConsumer类(threading.Thread):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def __init__(self, threadID, queue, path, mongoConn):
    self.threadID = threadID
    self.queue = queue
    self.mongoConn = mongoConn
    self.path = path
    threading.Thread.__init__(self)
def run(self):
    while (True):
        if (queue.empty()):
            mongoConn.close()
            break
        file = queue.get()
        self.mongoConn.persist(self.path, file)

EmailProducer实例从本地文件系统读取文件,如果队列为空,则将它们存储在队列中;EmailConsumer实例从队列中获取文件,并将它们推入Mongo.我还写了一个相同功能的顺序版本。我在我的ubuntu 12.04 32位台式机和i-5四核处理器上运行这两个系统,并对它们进行了计时。多线程版本从1个生产者和7个消费者开始。然而,它们都花费了大约23.7秒的实时时间和21.7秒的用户时间。我认为线程在这里会有帮助,但数字告诉我它没有帮助。

有人对这个原因有什么深刻的想法吗?

EN

回答 2

Stack Overflow用户

发布于 2012-04-06 01:37:26

线程化对于IO受限的操作并不是很有用。尤其是在全局解释器锁的情况下。所以一次只有一个线程在运行。我很惊讶在没有线程的情况下它不会更快。看看如何使用select module或第三方库异步读取文件。

票数 3
EN

Stack Overflow用户

发布于 2012-04-06 01:43:04

Python线程化在某种程度上受到CPython中的is considered to be pretty poor in terms of performanceGlobal Interpreter Lock的限制,这可能会对您的结果做出贡献。

所有的C级扩展也需要specific GIL support to avoid "defeating threads",在阻塞外部资源的同时保持GIL。这意味着如果你正在使用一个C层库,例如,与MongoDB对话,它可能会在操作时阻塞其他线程。(我不知道它会不会--只知道它可能会。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10038178

复制
相关文章
CSS 阴影动画优化技巧一则
本技巧来自这篇文章 -- How to animate box-shadow with silky smooth performance
Sb_Coco
2019/11/01
1K0
CSS 阴影动画优化技巧一则
UITableViewCell的重用机制原理
每当有一个cell从屏幕消失,就将其放到缓存池中,如果有新的cell出现,就去缓存池中取,如果缓存池中没有,再创建。
赵哥窟
2018/11/07
1.9K0
使用UITableViewCell遇到的问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/52414255
用户1451823
2018/09/13
7900
IOS UITableView UITableViewCell控件
import UIKit class ViewController:UIViewController,UITableViewDataSource { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view,typically from a nib. let screenRect = UIScreen.main.bounds let tableRect = CGRect(x:0, y:20, width: screenRect.size.width, height:screenRect.size.height - 20) let tableView = UITableView(frame:tableRect) tableView.dataSource = self self.view.addSubview(tableView) } func tableView(_ tableView:UITableView,numberOfRowsInSection section:Int) -> Int{ return 20 } func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) -> UITableViewCell { let identifier = “reusedCell” var cell =tableView.dequeueReusableCell(withIdentifier:identifier) if(cell == nil) { cell = UITableViewCell(style:UITableViewCellStyle.default, reuseIdentifier:identifier) } cell?.textLabel?.text = “命运负责洗牌,玩牌的是我们自己!” return cell! } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
用户5760343
2019/07/08
6530
IOS UITableView UITableViewCell控件
利用CSS线性渐变、阴影、缩放实现动画下雨效果
这个动画效果,如果让你来做,你会选择什么方式?相信很多小伙伴都会用gif图片。其实用css实现也很简单。
Javanx
2019/09/04
1.7K0
利用CSS线性渐变、阴影、缩放实现动画下雨效果
IOS UITableViewCell的删除和插入
----------------------------------------插入------------------------------------------- 1 import UIKit 2 3 class ViewController:UIViewController, UITableViewDataSource, UITableViewDelegate{ 4 5 var diablo3Level = [“普通模式”, “困难模式”, “高手模 式”, “大师模式”, “地狱模
用户5760343
2019/07/08
9090
IOS UITableViewCell的删除和插入
[WPF] 使用 Effect 玩玩阴影、内阴影、 长阴影
最近在学习怎么用 Shazzam Shader Editor 编写自定义的 Effect,并试着去实现阴影、内阴影和长阴影的效果。结果我第一步就放弃了,因为阴影用到的高斯模糊算法对我来说太太太太太太太太难了,最后只好用些投机取巧的方法来模仿这几种效果。
dino.c
2022/05/07
1.7K0
[WPF] 使用 Effect 玩玩阴影、内阴影、 长阴影
iOS_UITableView性能优化
// 滑动时按需加载, 防止卡顿 配合SDWebImage https://github.com/johnil/VVeboTableViewDemo
mikimo
2022/07/20
6480
阴影进阶,实现更加的立体的阴影效果!
关于它们的基础语法和使用就不过多描述,这一部分大家可以先在 MDN 补齐,贴几张图快速复习一下:
Sb_Coco
2022/04/28
2K0
阴影进阶,实现更加的立体的阴影效果!
input 在iPhone 上 上边框有阴影
主要让appearance属性为none; input { outline: none; -webkit-appearance: none; /*去除系统默认的样式*/ -webkit-tap-highlight-color: rgba(0, 0, 0, 0); /* 点击高亮的颜色*/ }
用户1437675
2018/08/20
9580
【CSS】盒子模型阴影 ( box-shadow: 水平阴影 垂直阴影 模糊距离 阴影尺寸 阴影颜色 内外阴影; )
只有 前两个阴影 , 水平阴影 和 垂直阴影 必须写 , 后面的四个值可以省略 ;
韩曙亮
2023/03/25
1.2K0
【CSS】盒子模型阴影 ( box-shadow: 水平阴影 垂直阴影 模糊距离 阴影尺寸 阴影颜色 内外阴影; )
Service Broker 无法工作的问题修复
数据库的Service Broker在通过备份/还原方式恢复数据库后,通过SELECT * FROM sys.transmission_queue 查到的错误信息: An exception occurred while enqueueing a message in the target queue. Error: 15517, State: 1. Cannot execute as the database principal because the principal "dbo" does not e
张善友
2018/01/19
1K0
文本阴影和边框阴影
    box-shadow:left top 模糊距离 阴影尺寸 阴影颜色 inset(内阴影);
十月梦想
2018/08/29
9760
SVG 动画精髓(上)
本文作者:ivweb villainthr TL;DR 本文主要是讲解关于 SVG 的一些高级动画特效,比如 SVG 动画标签,图形渐变,路径动画,线条动画,SVG 裁剪等。 例如:路径动画 图形
腾讯IVWEB团队
2017/07/06
3.7K0
SVG 动画精髓(上)
IOS UITableViewCell 选中 选择
1 import UIKit 2 3 class ViewController:UIViewController, UITableViewDataSource, UITableViewDelegate{ 4 5 let diablo3Level = [“普通模式”, “困难模式”, “高手模式”, “大师模式”, “痛苦模式”] 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 // Do any additional
用户5760343
2019/07/08
1.1K0
IOS UITableViewCell 选中 选择
iOS开发-UITableViewCell的创建方式
被static修饰的成员变量,全局只有一份内存 static的后面只可以放一个定值,这是在编译阶段就确定的
孙寅
2020/06/02
1.3K0
uniswap的工作原理(上)
你吃过天上掉下的馅饼吗?只要你在2020年的9月1号之前在uniswap交易所进行过任何一笔操作,就可以获得400的uni币。这个消息刚出的时候uni价值3美元,后续最高峰涨到了8.7美元。也就是说只要你进行了一笔交易,就能获得8k~2w人民币不等的奖励。
用户7976544
2020/11/14
1.7K0
uniswap的工作原理(上)
iOS UITableViewCell使用详解
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;
珲少
2018/08/15
1.1K0
UITableViewCell中添加复制逻辑
@interface ICUserInfoCell(){ UIMenuItem * _copyMenuItem; } @end @implementation ICUserInfoCell - (id)initWithStyle:(UITableViewCellStyle)cell reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:cell reuseIdentifier:reuseIdent
程序员不务正业
2018/06/14
7760
制作高大上的Canvas粒子动画
制作粒子动画效果要解决两个问题:一个是粒子动画轨迹,另外一个是粒子执行动画的时机。 首先来看下我们准备要做的粒子动画效果是怎么样的~ 是这样(粒子漂浮): 或者这样(粒子轨迹动画): 甚至是这样
练小习
2017/12/29
2.5K0

相似问题

UITableViewCell上的动画

20

UITableViewCell阴影

20

UITableViewCell阴影

11

在UITableviewCell高度设置动画时同时设置CALayer阴影动画

44

滚动时UITableViewCell上的阴影消失

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文