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使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
使用Turtle画正螺旋线的方法
Sep 22 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
python中的二维列表实例详解
Jun 19 Python
Python魔法方法功能与用法简介
Apr 04 Python
python处理document文档保留原样式
Sep 23 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
在python image 中实现安装中文字体
May 16 Python
Python如何在单元测试中给对象打补丁
Aug 03 Python
python MD5加密的示例
Oct 19 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中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
用js实现放大镜效果
2020/10/28 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python调用C++程序的方法详解
2017/01/24 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
如何理解python中数字列表
2020/05/29 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
入党积极分子自我鉴定
2014/02/18 职场文书
文明倡议书范文
2014/04/15 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
校运会新闻稿
2015/07/17 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技