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 相关文章推荐
探索Python3.4中新引入的asyncio模块
Apr 08 Python
python发送邮件实例分享
Jul 28 Python
Python hashlib模块用法实例分析
Jun 12 Python
python如何生成各种随机分布图
Aug 27 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
Aug 02 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
学python需要去培训机构吗
Jul 01 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
python 自动刷新网页的两种方法
Apr 20 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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语法自动检查的Vim插件
2014/08/11 PHP
php函数连续调用实例分析
2015/07/30 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
基于canvas粒子系统的构建详解
2017/08/31 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
Python 列表list使用介绍
2014/11/30 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
最小二乘法及其python实现详解
2020/02/24 Python
深入理解Python 多线程
2020/06/16 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
食品业务员岗位职责
2014/03/18 职场文书
个性发展自我评价2015
2015/03/09 职场文书
党员带头倡议书
2015/04/29 职场文书
预备党员半年考察意见
2015/06/01 职场文书
《绝招》教学反思
2016/02/20 职场文书
接收函
2019/04/22 职场文书
员工工作心得体会
2019/05/07 职场文书