Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法


Posted in Python onAugust 23, 2019

废话不多说,直接上代码吧!

import threading
import os
 
class Find(threading.Thread): #搜索数据的线程类
 def __init__(self,datalist,startIndex,endIndex,searchstr,savefile): #datalist要搜索的内容列表,startIndex列表搜索范围的开始下标,searchstr要搜索的内容
  threading.Thread.__init__(self)
  self.datalist=datalist #要搜索的数据的内存地址
  self.startIndex=startIndex #开始的索引
  self.endIndex=endIndex #结束的索引
  self.seachstr=searchstr #需要搜索的数据
  self.savefile=savefile
 def run(self):
 	self.findlist=[]
 	for i in range(self.startIndex,self.endIndex):
  	line=self.datalist[i].decode("gbk","ignore") #读取一行
  	if line.find(self.seachstr)!=-1:
  		print(self.getName(),line,end="") #搜索数据
  		self.findlist.append(line)
 	global mutex #多线程共享全局变量(全局锁)
 	with mutex: #获取锁(自动释放锁)
 		for line in self.findlist:
 			self.savefile.write(line.encode("gbk"))
  	
 
mutex=threading.Lock() #创建一个锁
savefile=open("c:\\zhaodao.txt","wb") #搜索到的内容写入该文件
 
path = "C:\\data1.txt" #要搜索的文件
file = open(path, "rb")
datalist = file.readlines() # 全部读入内存
lines=len(datalist) #所有的行数
searchstr=input("输入要查询的数据")
N=10 #开启10个线程
threadlist=[] #线程列表
# 97 9 0-1000000 1000000-2000000 2000000-3000000
for i in range(0,N-1): #0,1,2,3,4,5,6,7,8 数据切割
 mythd= Find(datalist,i*(lines//(N-1)) , (i+1)*(lines//(N-1)),searchstr,savefile) # //表示整除
 mythd.start()
 threadlist.append(mythd) #添加到线程列表
 
#97 = 97//10*10=90
mylastthd= Find(datalist,lines//(N-1)*(N-1),lines,searchstr,savefile) #最后的线程搜索剩下的尾数
mylastthd.start()
threadlist.append(mylastthd) #添加到线程列表
 
for thd in threadlist: #遍历线程列表
 thd.join()
print("finish")

以上这篇Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
让 python 命令行也可以自动补全
Nov 30 Python
Python基于Tkinter实现的记事本实例
Jun 17 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
Python实现DDos攻击实例详解
Feb 02 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
python tkinter窗口最大化的实现
Jul 15 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 #Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 #Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 #Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 #Python
自定义django admin model表单提交的例子
Aug 23 #Python
django admin 自定义替换change页面模板的方法
Aug 23 #Python
解决python多行注释引发缩进错误的问题
Aug 23 #Python
You might like
几个学习PHP的网址
2006/11/25 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
js style动态设置table高度
2014/10/21 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
关于Keras Dense层整理
2020/05/21 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
会议室标语
2014/06/21 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书