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中使用mysql数据库详细介绍
Mar 27 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
基于Python List的赋值方法
Jun 23 Python
Python玩转加密的技巧【推荐】
May 13 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
Python函数装饰器原理与用法详解
Aug 16 Python
python实现图片横向和纵向拼接
Mar 05 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
python操作yaml说明
Apr 08 Python
使用keras实现孪生网络中的权值共享教程
Jun 11 Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 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 trim 去除空字符的定义与语法介绍
2010/05/31 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
Python request使用方法及问题总结
2020/04/26 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
如何利用cmp命令比较文件
2013/09/23 面试题
开业庆典邀请函
2014/01/08 职场文书
党性观念心得体会
2014/09/03 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
中学教代会开幕词
2016/03/04 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python