Python 多线程不加锁分块读取文件的方法


Posted in Python onDecember 11, 2018

多线程读取或写入,一般会涉及到同步的问题,否则产生的结果是无法预期的。那么在读取一个文件的时候,我们可以通过加锁,但读不像写操作,会导致文件错误,另外锁操作是有一定的耗时。因此通过文件分块,可以比较有效的解决多线程读问题,之前看到有人写的分块操作,比较复杂,需要实现建立好线程以及所读取块信息,在这里,我提供了一种比较简便的方法,以供参考。

#!/user/bin/env python
#_*_coding:utf-8_*_
from threading import Thread
import time
from processing import Process, Queue

from multiprocessing import Process

file_path = 't'
fd = open(file_path, 'r')


def deal(thread_num):

 i = 1
 line_list = []

 #20是我的文件行数,正式情况下可以通过wc -l t获取
 while i <= 20/thread_num:
 line_list.append(fd.readline())
 i += 1
 return line_list


def todo(thread_name, line_list):
 # print 'thread_name:',thread_name,'start'
 for line in line_list:
 print str(thread_name) + ' counsume:' + line
 # print 'thread_name:', thread_name, 'end'


if __name__ == '__main__':
 thread_num = 10
 thread_list = []
 for i in range(thread_num):
 line_list = deal(thread_num)
 t = Thread(target=todo, args=[i, line_list])
 t.start()
 thread_list.append(t)

 for t in thread_list:
 t.join()

下面是文件格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

运行的结果如下:

Python 多线程不加锁分块读取文件的方法

以上这篇Python 多线程不加锁分块读取文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
Python使用MD5加密算法对字符串进行加密操作示例
Mar 30 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
selenium+python自动化测试之多窗口切换
Jan 23 Python
Django配置文件代码说明
Dec 04 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
Django choices下拉列表绑定实例
Mar 13 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
对python读写文件去重、RE、set的使用详解
Dec 11 #Python
python版本五子棋的实现代码
Dec 11 #Python
python提取具有某种特定字符串的行数据方法
Dec 11 #Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 #Python
Python面向对象基础入门之设置对象属性
Dec 11 #Python
python提取包含关键字的整行数据方法
Dec 11 #Python
django开发post接口简单案例,获取参数值的方法
Dec 11 #Python
You might like
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
实用函数9
2007/11/08 PHP
php牛逼的面试题分享
2013/01/18 PHP
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
基于vue实现swipe分页组件实例
2017/05/25 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
nodejs多版本管理总结
2018/04/03 NodeJs
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
Python中turtle作图示例
2017/11/15 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
python如何更新包
2020/06/11 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
研究生自荐信
2013/10/09 职场文书
电子商务应届生求职信
2013/11/16 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
职称评定自我鉴定
2014/03/18 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
学雷锋的心得体会
2014/09/04 职场文书
校本培训个人总结
2015/02/28 职场文书
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技