python对大文件的处理
2024-08-31 10:52:56
多线程框架中采取queue来实现线程间资源的互斥。
在文件过大的情况下,如果都读入内存的话,占用内存就太多了。
这里手动实现了一个多线程调用文件迭代器来使用f.next()
# -*- coding:utf-8 -*-
import threading
class Geturl(object):
def __init__(self, open_file):
self.open_file = open_file
self.num = 0
self.__mutex = threading.RLock()
self.f = open(self.open_file, 'r')
self.kafka_mutex = threading.RLock()
def _line(self):
self.__mutex.acquire()
try:
line = self.f.__next__()
except StopIteration:
line = StopIteration
self.f.close()
'''
if self.num % 1000 == 0:
print(self.num)
self.num += 1
'''
self.__mutex.release()
return line
def get_line(self):
return self._line()
def _deal(deal_file):
while True:
try:
item = deal_file.get_line()
# 处理工作
if item == StopIteration:
raise ValueError()
except ValueError:
print("all task has done!")
break
except Exception as e:
print("error:", e)
if __name__ == "__main__":
filename = 'Bigfile'
geturl = Geturl(filename)
_deal(geturl)
最新文章
- Web之路笔记之四
- HDU 1005 Number Sequence
- 【Django】Django 如何使用 Django设置的日志?
- SQLSERVER:通过sys.tables实现批量删表、快速统计多表记录和
- 使用Flexible实现手淘H5页面的终端适配【转】
- Windows安装pomelo过程
- C#.NET数据库访问类DBHelper
- jQuery手机对话框插件
- 【C语言】浅谈可变参数与printf函数
- DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)
- python学习第20天
- 《Java大学教程》—第14章 抽象、继承和接口
- 【*】CAS 是什么,Java8是如何优化 CAS 的
- linux 下安装mysql-5.7.12-1.el6.x86_64.rpm-bundle.tar
- python windows安装 SQLServer pymssql,
- 论文阅读:CNN-RNN: A Unified Framework for Multi-label Image Classification
- SharePoint 删除废弃站点步骤
- bitset相关
- GNU Radio: Overview of the GNU Radio Scheduler
- js常用模板引擎
热门文章
- [Javascript Crocks] Safely Access Object Properties with `prop`
- sqlite3树形结构遍历效率对照測试
- 黑马day01 笔记
- UVa 572 - Oil Deposits (简单dfs)
- Windows 10彻底关闭自动更新
- 超级简单的利用javascript实现文件拖拽事件
- 图片全屏轮播插件poposlides
- idea下的jsp开发中cannot resolve taglib with uri的解决方法
- Spark Streaming 整合 Kafka
- Fiddler-AutoResponder 修改接口数据