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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
跟老齐学Python之让人欢喜让人忧的迭代
Oct 02 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Python连接数据库学习之DB-API详解
Feb 07 Python
Apache如何部署django项目
May 21 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
Python中super函数用法实例分析
Mar 18 Python
python实现XML解析的方法解析
Nov 16 Python
python生成特定分布数的实例
Dec 05 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
python中upper是做什么用的
Jul 20 Python
Python模拟键盘输入自动登录TGP
Nov 27 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
谈谈PHP语法(2)
2006/10/09 PHP
社区(php&amp;&amp;mysql)四
2006/10/09 PHP
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
判断网页编码的方法python版
2016/08/12 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
基于Python 函数和方法的区别说明
2021/03/24 Python
文明学生事迹材料
2014/01/29 职场文书
房产协议书范本
2014/10/18 职场文书
环卫个人总结
2015/03/03 职场文书
企业百日安全活动总结
2015/05/07 职场文书
2016年万圣节活动总结
2016/04/05 职场文书