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批量修改文件后缀示例代码分享
Dec 24 Python
python提取页面内url列表的方法
May 25 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Python断言assert的用法代码解析
Feb 03 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
Python实现确认字符串是否包含指定字符串的实例
May 02 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
Python实现图片转字符画的代码实例
Feb 22 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
django配置app中的静态文件步骤
Mar 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中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
WAF的正确bypass
2017/01/05 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
基于python实现简单日历
2018/07/28 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
python快排算法详解
2019/03/04 Python
简单介绍python封装的基本知识
2019/08/10 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
大学生自荐书范文
2013/12/10 职场文书
会计顶岗实习心得
2014/01/25 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
一年级学生评语
2014/04/23 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
安全生产承诺书范文
2014/05/22 职场文书
大学同学会活动方案
2014/08/20 职场文书
一年级小学生评语大全
2014/12/25 职场文书
公司表扬稿范文
2015/05/05 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js