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计算圆周长、面积、球体体积并画出圆
Apr 08 Python
Python多线程结合队列下载百度音乐的方法
Jul 27 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
Python实现PS滤镜碎片特效功能示例
Jan 24 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
Python如何实现动态数组
Nov 02 Python
Python实现代码块儿折叠
Apr 15 Python
Python生成随机验证码代码实例解析
Jun 09 Python
利用Python实现斐波那契数列的方法实例
Jul 26 Python
详解python tcp编程
Aug 24 Python
python包的导入方式总结
Mar 02 Python
Python torch.flatten()函数案例详解
Aug 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
用PHP实现Ftp用户的在线管理的代码
2007/03/06 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
js innerHTML 改变div内容的方法
2013/08/03 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
建筑专业自荐信范文
2014/01/05 职场文书
政协调研汇报材料
2014/08/15 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
加强作风建设工作总结
2014/10/23 职场文书
新员工入职感言范文!
2019/07/04 职场文书