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实现360皮肤按钮控件示例
Feb 21 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
用Python代码来解图片迷宫的方法整理
Apr 02 Python
Python实现单词拼写检查
Apr 25 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
python代码过长的换行方法
Jul 19 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 Python
python实现多人聊天室
Mar 31 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
Python这样操作能存储100多万行的xlsx文件
Apr 16 Python
Python有参函数使用代码实例
Jan 06 Python
python json load json 数据后出现乱序的解决方案
Feb 27 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
php 保留小数点
2009/04/21 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
python3实现简单飞机大战
2020/11/29 Python
python线程优先级队列知识点总结
2021/02/28 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
电气工程自动化求职信
2014/03/14 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
市场部岗位职责
2015/02/12 职场文书
入伍通知书
2015/04/23 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
行政处罚事先告知书
2015/07/01 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android