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 time模块用法实例详解
Sep 11 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
Python文本特征抽取与向量化算法学习
Dec 22 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
Django CSRF跨站请求伪造防护过程解析
Jul 31 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
python列表返回重复数据的下标
Feb 10 Python
解决django FileFIELD的编码问题
Mar 30 Python
Python实现AI换脸功能
Apr 10 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
python温度转换华氏温度实现代码
Dec 06 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Linux下编译安装MySQL-Python教程
2015/02/02 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
python的pip安装以及使用教程
2018/09/18 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
蜜蜂引路教学反思
2014/02/04 职场文书
母婴店促销方案
2014/03/05 职场文书
体育活动总结范文
2014/05/04 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
大学学生会竞选稿
2015/11/19 职场文书
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL