python多线程分块读取文件


Posted in Python onAugust 29, 2019

本文实例为大家分享了python多线程分块读取文件的具体代码,供大家参考,具体内容如下

# _*_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在线运行代码助手
Jul 15 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
Python查找第n个子串的技巧分享
Jun 27 Python
python将秒数转化为时间格式的实例
Sep 16 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
Python: 传递列表副本方式
Dec 19 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
Python基础知识之变量的详解
Apr 14 Python
PyQt5实现多张图片显示并滚动
Jun 11 Python
用sqlalchemy构建Django连接池的实例
Aug 29 #Python
详解Python 字符串相似性的几种度量方法
Aug 29 #Python
python多线程同步之文件读写控制
Feb 25 #Python
python线程中的同步问题及解决方法
Aug 29 #Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 #Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 #Python
深入了解python中元类的相关知识
Aug 29 #Python
You might like
用PHP调用数据库的存贮过程!
2006/10/09 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
angularjs 缓存的使用详解
2018/03/19 Javascript
vue如何判断dom的class
2018/04/26 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python获取list下标及其值的简单方法
2016/09/12 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python 下载及安装详细步骤
2019/11/04 Python
在python中做正态性检验示例
2019/12/09 Python
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
高级护理实习生自荐信
2013/09/28 职场文书
初三学生个人自我评定
2014/04/06 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
护士医德考评自我评价
2015/03/03 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
小学运动会报道稿
2015/07/22 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
Python开发五子棋小游戏
2022/05/02 Python