Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
作者:houyanhua1 发布时间:2021-01-15 12:48:34
标签:Python,多线程,搜索,txt
废话不多说,直接上代码吧!
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")
来源:https://blog.csdn.net/houyanhua1/article/details/78250843
0
投稿
猜你喜欢
- 基于python+OpenCV的车牌号码识别,供大家参考,具体内容如下车牌识别行业已具备一定的市场规模,在电子警察、公路卡口、停车场、商业管
- 本文实例为大家分享了TensorFlow实现创建分类器的具体代码,供大家参考,具体内容如下创建一个iris数据集的分类器。 加载样本数据集,
- 补充说明,外键:不要使用外键,一切外键概念都在应用层解决。补充说明,数据库的列,也就是字段名,尽量带上飘符号`数据库存在的意义:数据存储和数
- 昨天在书上看到SQL语句优化时,where条件顺序不同,性能不同,这个建议在Oracle11G版本还合适吗?方式1优于方式2? 方式1: s
- 一、super( ) 的用途了解 super() 函数之前,我们首先要知道 super() 的用途是啥?主要用来在子类中调用父类的方法。多用
- 前言Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系
- 本文实例讲述了python日志logging模块使用方法。分享给大家供大家参考,具体如下:一、从一个使用场景开始开发一个日志系统, 既要把日
- 本文实例讲述了Python简单获取网卡名称及其IP地址的方法。分享给大家供大家参考,具体如下:windows上想知道网卡和IP地址,可以使用
- while语句打印1-20的整数,并且每行打印五个数,为了实现每行5个数,我们使用一个if判断语句来实现,判断当打印出5个数之后,自动换行打
- Python GUI 库有很多,下面给大家罗列常用的几种 GUI 库。下面介绍的这些GUI框架,能满足大部分开发人员的需要,你可以根据自己的
- 本文实例为大家分享了javascript实现简易计算器的具体代码,供大家参考,具体内容如下编辑了几个小时研发了一个简易好理解的计算器。不停改
- 这篇文章是入门级别的应用Python + Selenium进行自动化测试,包括环境搭建及简单的实例。基本思想是用Firefox Seleni
- w3c range range 用来表示用户的选择区域,这块选择区域由两个边界位置界定,而位置则由其容器以及偏移量构成,称作 contain
- 使用tensorflow 训练模型时,我们可以使用 tensorflow自带的 Save模块 tf.train.Saver()来保存模型,使
- 字符串多级目录取值:比如说:你response接收到的数据是这样的。你现在只需要取到itemstring 这个字段下的值。其他的都不要!思路
- 这篇文章主要介绍了python字符串替换re.sub()实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 本文实例为大家分享了Python实现五子棋游戏的具体代码,供大家参考,具体内容如下class CheckerBoard(): &
- 这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀。。。。先简单的说下吧,百度提供
- 一、什么是MD5校验和?MD5,是Message Digest Algorithm 5的缩写,即消息摘要算法版本5。消息摘要算法通过对所有数
- 由于最近测试需要录制系统界面的操作过程,因为都是全屏的操作,所以用python做一个简单的录屏小工具。实现过程也是比较简单,就是通过对屏幕操