# _*_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多线程分块读取文件相关推荐

  1. python扫描目录下文件_Python扫描目录读取文件,不考虑子目录

    这篇文章主要为大家详细介绍了Python扫描目录读取文件,不考虑子目录,具有一定的参考价值,可以用来参考一下. 感兴趣Python扫描目录读取文件,不考虑子目录的小伙伴,下面一起跟随512笔记的小编罗 ...

  2. python多线程写同一个文件_Python多线程快速写入文件,python,飞速

    Python多线程快速写入文件,python,飞速 发表时间:2020-07-10 乱序多线程写入 举个最简单的例子,只要求快速写入即可,对顺序无要求时: import threading def w ...

  3. python 多线程读写文件_python多线程同步之文件读写控制

    本文实例为大家分享了python多线程同步之文件读写控制的具体代码,供大家参考,具体内容如下 1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env pyth ...

  4. python文件分块读取_Python多进程分块读取超大文件的方法

    本文实例讲述了Python多进程分块读取超大文件的方法.分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- i ...

  5. python 代码分块_[代码全屏查看]-python多进程分块读取文件

    [1].[代码] [Python]代码 # -*- coding: GBK -*- import urlparse import datetime import os from multiproces ...

  6. python读取所有txt文件_python如何批量读取txt文件

    python批量读取txt文件的方法:首先导入系统模块:然后将文件夹路径更改为需要批量读取的txt文件存放的路径:再调用系统模块得到该文件夹下的所有文件名称:最后遍历文件夹,读取txt文件. 如果文件 ...

  7. python open读取_python,一读取文件open()

    在实际操作中,我们经常会读取文件,这个时候python为我们提供了一个open()的方法,供我们读取文件,通过help(open),我们可以获取open的方法 f.close()关闭读取 f.read ...

  8. python怎么批量读取文件_python如何批量读取txt文件

    原标题:python如何批量读取txt文件 python批量读取txt文件的方法:首先导入系统模块:然后将文件夹路径更改为需要批量读取的txt文件存放的路径:再调用系统模块得到该文件夹下的所有文件名称 ...

  9. python3 读取.plist文件_Python学习笔记 -5 - 文件操作

    Python文件操作 读写文件是最常见的IO操作,在磁盘上读写文件的功能都是由操作系统提供的,操作系统不允许普通的程序直接操作磁盘(大部分程序都需要间接的通过操作系统来完成对硬件的操作),所以,读写文 ...

最新文章

  1. python迭代列表_Python迭代列表中列的元素
  2. 调用支付宝接口android最新,Android 外接sdk之支付宝
  3. 商汤组了「最强大脑」局,正儿八经解释为啥搞起电竞AI
  4. php curl ob start,curl - php中开启缓冲压缩 ob_start('ob_gzhandler') 之后是在什么时候开始的压缩?...
  5. dom4j-cookbook
  6. “哪里有人喜欢孤独,不过是害怕失望罢了”———村上春树《东尼泷谷》观后感...
  7. PostgreSQL的clog—从事务回滚速度谈起
  8. Jsp 页面添加动态水印
  9. 高清壁纸|是时候换换心情了
  10. 基于SGIP协议编写短信网关接口
  11. PhoneGap在Microsoft Visual Studio Express For Wi...
  12. 无线通信算法工程师知识地图
  13. 性能测试-性能测试结果分析
  14. 处暑(Limit of Heat )节到了,应了解的生活常识
  15. html显示ping值,jquery JS实现ping的功能(JS ping url)
  16. PDF格式转换WPS格式如何实现
  17. 周星驰搞笑电影中的BT角色大全(100位)
  18. 【Wifi模块】使用基于CP2102のWifi模块连接阿里云
  19. 视觉工程师出差过多必会出现的问题
  20. Error from server: Get “https:IP:10250/*“:dial tcp IP:10250: connect: no route to host

热门文章

  1. Android中使用GridView实现标签效果源码
  2. 利用Oracle虚拟私有数据库进行整合
  3. Kubernetes v1.6开始支持RBAC
  4. 黑客攻破网站涂鸦特效(强烈建议看看)
  5. web自动化测试之百度经验-HTTP层面的Web Service自动化测试
  6. vim中Mapping already in use: LocalLeaderis, mode n错误解决的方法解释
  7. cocos2d-x plist使用
  8. 静静守候属于我们的幸福。坚守我们的约定
  9. 【学习笔记】 Python - Pandas
  10. 【MM 模块】 Optimized Purchasing 优化采购 3