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函数参数*args**kwargs用法实例
Dec 04 Python
python中readline判断文件读取结束的方法
Nov 08 Python
python比较两个列表是否相等的方法
Jul 28 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
python中redis的安装和使用
Dec 04 Python
python根据txt文本批量创建文件夹
Dec 08 Python
numpy concatenate数组拼接方法示例介绍
May 27 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python 求定积分和不定积分示例
Nov 20 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
python实现图片九宫格分割的示例
Apr 25 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中执行系统命令的方法
2015/03/21 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
Django 再谈一谈json序列化
2020/03/16 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
劳资协议书范本
2014/04/23 职场文书
邓小平理论心得体会
2014/09/09 职场文书
2014年预备党员群众路线教育实践活动对照检查材料思想汇报
2014/10/02 职场文书
招商引资工作汇报
2014/10/28 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
销售开票员岗位职责
2015/04/15 职场文书
php实现自动生成验证码的实例讲解
2021/11/17 PHP