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连接mysql并提交mysql事务示例
Mar 05 Python
python连接mysql实例分享
Oct 09 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
Python随机函数库random的使用方法详解
Aug 21 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
Django之富文本(获取内容,设置内容方式)
May 21 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
详解python polyscope库的安装和例程
Nov 13 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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python元字符的用法实例解析
2018/01/17 Python
python表格存取的方法
2018/03/07 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
解析Python的缩进规则的使用
2019/01/16 Python
python超时重新请求解决方案
2019/10/21 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
入党自我评价优缺点
2014/01/25 职场文书
玲玲的画教学反思
2014/02/04 职场文书
决心书标准格式
2014/03/11 职场文书
项目建议书格式
2014/03/12 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers