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的Django框架中编写编译函数
Jul 20 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
彻底理解Python中的yield关键字
Apr 01 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
Django的models中on_delete参数详解
Jul 16 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
python socket 聊天室实例代码详解
Nov 14 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 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实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
accesskey 提交
2006/06/26 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
JsChart组件使用详解
2018/03/04 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
Python3 中文文件读写方法
2018/01/23 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
python使用matplotlib画饼状图
2018/09/25 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
学校法制宣传月活动总结
2014/07/03 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
员工评语范文
2014/12/31 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书