python 多线程读写文件_python多线程读取文件

网上只有多进程,有木有?理解和书写代码花了一天的时间,有木有?

多线程分块读取# -*- coding: utf-8 -*-

import os,time

import threading

rlock = threading.RLock()

curPosition = 0

class Reader(threading.Thread):

def __init__(self, res):

self.res = res

super(Reader, self).__init__()

def run(self):

global curPosition

fstream = open(self.res.fileName, 'r')

while True:

#锁定共享资源

rlock.acquire()

startPosition = curPosition

curPosition = endPosition = (startPosition + self.res.blockSize) if (startPosition + self.res.blockSize) < self.res.fileSize else self.res.fileSize

#释放共享资源

rlock.release()

if startPosition == self.res.fileSize:

break

elif startPosition != 0:

fstream.seek(startPosition)

fstream.readline()

pos = fstream.tell()

while pos < endPosition:

line = fstream.readline()

#处理line

#print(line.strip())

pos = fstream.tell()

fstream.close()

class Resource(object):

def __init__(self, fileName):

self.fileName = fileName

#分块大小

self.blockSize = 100000000

self.getFileSize()

#计算文件大小

def getFileSize(self):

fstream = open(self.fileName, 'r')

fstream.seek(0, os.SEEK_END)

self.fileSize = fstream.tell()

fstream.close()

if __name__ == '__main__':

starttime = time.clock()

#线程数

threadNum = 4

#文件

fileName = 'IPData.txt';

res = Resource(fileName)

threads = []

#初始化线程

for i in range(threadNum):

rdr = Reader(res)

threads.append(rdr)

#开始线程

for i in range(threadNum):

threads[i].start()

#结束线程

for i in range(threadNum):

threads[i].join()

print(time.clock() - starttime)

多线程按行读取#在上面的代码中使用open(file, 'r')产生的句柄每次在线程锁里面pop()就好了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值