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爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
python中defaultdict的用法详解
Jun 07 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
python脚本实现验证码识别
Jun 07 Python
对python程序内存泄漏调试的记录
Jun 11 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
python爬虫实现获取下一页代码
Mar 13 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
Python基础之常用库常用方法整理
Apr 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
PHP中文件上传的一个问题
2010/09/04 PHP
yii框架源码分析之创建controller代码
2011/06/28 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
你不知道的 javascript【推荐】
2017/01/08 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
python任务调度实例分析
2015/05/19 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
工作自我评价分享
2013/12/01 职场文书
农民工创业典型事迹
2014/01/25 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
师德师风学习材料
2014/12/19 职场文书
民事纠纷协议书
2016/03/23 职场文书
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫