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程序与C程序的结合使用
Apr 07 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
用python编写第一个IDA插件的实例
May 29 Python
Python中logging实例讲解
Jan 17 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
Django实现发送邮件功能
Jul 18 Python
python无序链表删除重复项的方法
Jan 17 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 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程序的多种方法介绍
2014/11/06 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
Python下Fabric的简单部署方法
2015/07/14 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
tensorflow常用函数API介绍
2020/04/19 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
澳大利亚最受欢迎的女士度假服装:Kabana Shop
2020/10/10 全球购物
在C#中如何实现多态
2014/07/02 面试题
幼教求职信
2014/03/12 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS