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利用beautifulSoup实现爬虫
Sep 29 Python
Python多线程编程(六):可重入锁RLock
Apr 05 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
Python实现的rsa加密算法详解
Jan 24 Python
python读取文件名称生成list的方法
Apr 27 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
Python中shapefile转换geojson的示例
Jan 03 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
python实现拼图小游戏
Feb 22 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
Python非单向递归函数如何返回全部结果
Dec 18 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
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python从sqlite读取并显示数据的方法
2015/05/08 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
法律专业个人实习自我鉴定
2013/09/23 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
差生评语大全
2014/05/04 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
用Python生成会跳舞的美女
2022/01/18 Python
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
MySql分区类型及创建分区的方法
2022/04/13 MySQL