# -*- coding: utf-8 -*-import os,timeimport threadingrlock = threading.RLock()curPosition = 0class 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)