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获取GY-85九轴模块信息示例
Dec 05 Python
python制作最美应用的爬虫
Oct 28 Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
python对视频画框标记后保存的方法
Dec 07 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 Python
python 实现逻辑回归
Dec 30 Python
Python 解决空列表.append() 输出为None的问题
May 23 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
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php数组去除空值函数分享
2015/02/02 PHP
PHP异常处理浅析
2015/05/12 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
python传递参数方式小结
2015/04/17 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
关于numpy数组轴的使用详解
2019/12/05 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
应届生护士求职信
2013/11/01 职场文书
高一自我鉴定
2013/12/17 职场文书
自荐信写法介绍
2014/01/25 职场文书
优秀干部获奖感言
2014/01/31 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
群众路线个人整改措施
2014/10/24 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL