# _*_coding:utf-8_*_
import time, threading, configparser
'''reader類,繼承threading.thread
@__init__方法初始化
@run方法實現了讀檔案的操作
'''cl程式設計客棧ass reader(threading.thread):
def __init__(self, file_name, start_pos, end_pos):
super(reader, self).__init__()
self.file_name = file_name
self.start_pos = start_pos
selreygicf.end_pos = end_pos
def run(self):
fd = open(self.file_name, 'r')
'''該if塊主要判斷分塊後的檔案塊的首位置是不是行首,
是行首的話,不做處理
否則,將檔案塊的首位置定位到下一行的行首
'''程式設計客棧 if self.start_pos != 0:
fd.seek(self.start_pos-1)
if fd.read(1) != '\n':
line = fd.readline()
self.start_pos = fd.tell()
fd.seek(self.start_pos)
'''對該檔案塊進行處理
'''while (self.start_pos <= self.end_pos):
line = fd.readline()
'''do somthing
'''self.start_pos = fd.tell()
'''對檔案進行分塊,檔案塊的數量和執行緒數量一致
'''class partition(object):
def __init__(self, file_name, thread_num):
self.file_name = file_name
self.block_num = thread_num
def part(self):
fd = open(self.file_name, 'r')
fd.seek(0, 2)
pos_list =
file_size = fd.tell()
block_size = file_size/self.block_num
start_pos = 0
for i in range(self.block_num):
if i == self.block_num-1:
end_pos = file_size-1
pos_list.append((start_pos, end_pos))
break程式設計客棧
end_pos = start_pos+block_size-1
if end_pos >= file_size:
end_pos = file_size-1
if start_pos >= file_size:
break
pos_list.append((start_pos, end_pos))
start_pos = end_pos+1
fd.close()
return pos_list
if __name__ == '__main__':
'''讀取配置檔案
'''程式設計客棧
config = configparser.configparser()
config.readfp(open('conf.ini'))
#檔名
file_name = config.get('info', 'filename')
#執行緒數量
thread_num = int(config.get('info', 'threadnum'))
#起始時間
start_time = time.clock()
p = partition(file_name, thread_num)
t =
pos = p.part()
#生成執行緒
for i in range(thread_num):
t.append(reader(file_name, *pos[i]))
#開啟執行緒
for i in range(thread_num):
t[i].start()
for i in range(thread_num):
t[i].join()
#結束時間
end_time = time.clock()
print "cost time is %f" % (end_time - start_time)
本文標題: python多執行緒分塊讀取檔案
本文位址:
Python 多執行緒分塊讀取檔案
什麼也不說,直接上 絕對看的懂 coding utf 8 import time,threading,configparser reader類,繼承threading.thread init 方法初始化 run方法實現了讀檔案的操作 class reader threading.thread def...
Python 多執行緒不加鎖分塊讀取檔案
多執行緒讀取或寫入,一般會涉及到同步的問題,否則產生的結果是無法預期的。那麼在讀取乙個檔案的時候,我們可以通過加鎖,但讀不像寫操作,會導致檔案錯誤,另外鎖操作是有一定的耗時。因此通過檔案分塊,可以比較有效的解決多執行緒讀問題,之前看到有人寫的分塊操作,比較複雜,需要實現建立好執行緒以及所讀取塊資訊,...
python多執行緒讀取檔案
coding utf 8 importos,time import threading rlock threading rlock curposition 0 class reader threading thread def init self res self res res super rea...