Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)

来源:互联网 发布:网页自动填表软件 编辑:程序博客网 时间:2024/05/14 15:15
import threadingimport osclass 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-3000000for 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=90mylastthd= Find(datalist,lines//(N-1)*(N-1),lines,searchstr,savefile)  #最后的线程搜索剩下的尾数mylastthd.start()threadlist.append(mylastthd)  #添加到线程列表for  thd in threadlist:  #遍历线程列表    thd.join()print("finish")

阅读全文
0 0
原创粉丝点击