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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
跟老齐学Python之编写类之二方法
Oct 11 Python
Python计算回文数的方法
Mar 11 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
Python3使用requests登录人人影视网站的方法
May 11 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
解读! Python在人工智能中的作用
Nov 14 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
python实现windows壁纸定期更换功能
Jan 21 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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
神族 PROTOSS 概述
2020/03/14 星际争霸
玩转图像函数库―常见图形操作
2006/09/03 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
Python字符串拼接的几种方法整理
2017/08/02 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
Python生成器generator用法示例
2018/08/10 Python
Python之修改图片像素值的方法
2019/07/03 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Python读取csv文件实例解析
2019/12/30 Python
Python随机数函数代码实例解析
2020/02/09 Python
python math模块的基本使用教程
2021/01/16 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
送温暖献爱心活动总结
2014/07/08 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
淘宝客服工作职责
2014/07/11 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2015年大学生实习评语
2015/03/25 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书