python多執行緒分塊讀取檔案

2022-10-04 16:18:20 字數 2467 閱讀 4270

# _*_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...