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 相关文章推荐
Zabbix实现微信报警功能
Oct 09 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
Python 数据处理库 pandas进阶教程
Apr 21 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
python数据结构之线性表的顺序存储结构
Sep 28 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
详解python之heapq模块及排序操作
Apr 04 Python
python单元测试框架pytest的使用示例
Oct 07 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
Python logging模块学习笔记
2014/05/24 Python
Python验证码识别处理实例
2015/12/28 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
python实现KNN分类算法
2019/10/16 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
自我鉴定的范文
2013/10/03 职场文书
2013年入党人员的自我鉴定
2013/10/25 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
解除同居协议书
2015/01/29 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
Python OpenCV 图像平移的实现示例
2021/06/04 Python
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
用Python实现屏幕截图详解
2022/01/22 Python