Python 多线程分块读取文件
2016-08-02 15:29
274 查看
什么也不说,直接上代码,绝对看的懂
# _*_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 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(35):多线程读取文件
- Python 多线程分块读文件
- Python多进程分块读取超大文件的方法
- Python多进程分块读取文件
- python多进程分块读取文件
- Python 读取键盘输入字符,多线程操作,文件操作随机处理 开发范例
- python多线程读取同一个文件
- python多进程分块读取文件
- Python多进程分块读取超大文件的方法
- 大文件的分块读取
- 用python写的一个超小型配置文件读取器
- Python 使用 xlrd 读取 Excel格式文件
- java多线程同时读取一个文件
- 用Python读取轻轻松松背单词的GDS词库文件
- Python recipe(11):读取ini配置文件
- python ! 点菜脚本 | 正则表达式 | 文件读取
- Python文件操作 打开,读取,关闭
- python中文件的按行读取
- python版的读取声音文件到常量数组