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抓取京东图书评论数据
Aug 31 Python
Ubuntu下安装PyV8
Mar 13 Python
python列表的常用操作方法小结
May 21 Python
mac下如何将python2.7改为python3
Jul 13 Python
简单了解django索引的相关知识
Jul 17 Python
python通过http下载文件的方法详解
Jul 26 Python
Python3实现二叉树的最大深度
Sep 30 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
Python嵌套函数,作用域与偏函数用法实例分析
Dec 26 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
pandas数据分组groupby()和统计函数agg()的使用
Mar 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/10/09 PHP
PHP 实用代码收集
2010/01/22 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
Python中设置变量访问权限的方法
2015/04/27 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
数据库基础的一些面试题
2012/02/25 面试题
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
美容院店长岗位职责
2014/04/08 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL