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聚类算法之DBSACN实例分析
Nov 20 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
Python网络爬虫实例讲解
Apr 28 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
Jan 23 Python
详解Numpy中的广播原则/机制
Sep 20 Python
Python Django的安装配置教程图文详解
Jul 17 Python
Django获取应用下的所有models的例子
Aug 30 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
jupyter notebook指定启动目录的方法
Mar 02 Python
python 将Excel转Word的示例
Mar 02 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中smarty区域循环的方法
2015/06/11 PHP
js代码实现微博导航栏
2015/07/30 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
Python随机生成带特殊字符的密码
2016/03/02 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
python程序快速缩进多行代码方法总结
2019/06/23 Python
postman传递当前时间戳实例详解
2019/09/14 Python
Django实现基于类的分页功能
2019/10/31 Python
python创建n行m列数组示例
2019/12/02 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
致1500米运动员广播稿
2014/02/07 职场文书
HR求职自荐信范文
2014/06/21 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
2015年统战工作总结
2015/05/19 职场文书