python处理大文件_python对大文件的处理

多线程框架中采取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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值