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实现的ini文件操作类分享
Nov 20 Python
用Python中的字典来处理索引统计的方法
May 05 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
requests和lxml实现爬虫的方法
Jun 11 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
python覆盖写入,追加写入的实例
Jun 26 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
Python使用pycharm导入pymysql教程
Sep 16 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 Python
Python语言内置数据类型
Feb 24 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
抓取YAHOO股票报价的类
2009/05/15 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
教大家制作简单的php日历
2015/11/17 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
window.location.hash 使用说明
2010/11/08 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
JS面向对象之多选框实现
2020/01/17 Javascript
python处理csv数据的方法
2015/03/11 Python
Python实现截屏的函数
2015/07/26 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
python语言元素知识点详解
2019/05/15 Python
python 实现屏幕录制示例
2019/12/23 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
Django更新models数据库结构步骤
2020/04/01 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
美国存储和组织商店:The Container Store
2017/08/16 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
四风问题查摆剖析材料
2014/10/11 职场文书
导游词怎么写
2015/02/04 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书