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通过定义一个类实例作为ftp回调方法
May 04 Python
Python实现遍历数据库并获取key的值
May 17 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
Python实现的文本编辑器功能示例
Jun 30 Python
python中reload(module)的用法示例详解
Sep 15 Python
Django中的Model操作表的实现
Jul 24 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
python for和else语句趣谈
Jul 02 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 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 缓存函数代码
2008/08/27 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
简单谈谈favicon
2015/06/10 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
vue组件学习教程
2017/09/09 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
使用Python生成url短链接的方法
2015/05/04 Python
python3调用R的示例代码
2018/02/23 Python
Python并行分布式框架Celery详解
2018/10/15 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
python3注册全局热键的实现
2020/03/22 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
请用用Java代码写一个堆栈
2012/01/26 面试题
商务日语专业毕业生求职信
2013/10/26 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
质量月活动总结
2014/08/26 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
稽核岗位职责范本
2015/04/13 职场文书
单方投资意向书
2015/05/11 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
Python中可变和不可变对象的深入讲解
2021/08/02 Python