Python 多執行緒分塊讀取檔案

2021-08-23 12:29:18 字數 2305 閱讀 9177

什麼也不說,直接上**,絕對看的懂

# _*_coding:utf-8_*_

import time, threading, configparser

'''reader類,繼承threading.thread

@__init__方法初始化

@run方法實現了讀檔案的操作

'''class 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

self.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

break

end_pos = start_pos+block_size-1

if end_pos >= file_size:

end_pos = file_size-1

if start_pos >= file_size:

break

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):

#開啟執行緒

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多執行緒分塊讀取檔案

coding utf 8 import time,threading,configparser reader類,繼承threading.thread init 方法初始化 run方法實現了讀檔案的操作 cl程式設計客棧ass reader threading.thread def init self...

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...