欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python多線程分塊讀取文件

系統 1632 0

本文實例為大家分享了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)
          

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 青草青草久热精品视频在线网站 | 精品毛片 | 日本福利在线观看 | 精品成人| japanese xxxxhd| 青青草免费观看完整版高清 | 色综合久久中文色婷婷 | 91精品观看91久久久久久 | 在线精品亚洲欧美日韩国产 | 午夜精品久久久久久久99蜜桃i | 天天做天天爱天天爽综合区 | 狠狠躁夜夜躁人人爽天天高潮 | 日本大学生免费一级一片 | 911色_911色sss主站色播 | 亚洲人人草| 中文字幕一区二区三区四区五区 | 国产精品国产精品国产专区不卡 | 国产精品无码永久免费888 | 成人精品视频在线观看 | 天天操,夜夜操 | 天天摸天天操天天干 | 日韩一区二区三区在线视频 | 国产在线精品一区二区高清不卡 | 国产精品久久久久久久午夜 | 激情五月色综合色婷婷 | 凹凸日日摸日日碰夜夜爽孕妇 | av天天看 | 可以免费观看的av | 久久亚洲一区二区 | 一区二区三区毛A片特级 | 欧美久久一区二区三区 | 亚洲刺激视频 | 香蕉综合视频 | 欧美日本中文字幕 | 我不卡午夜 | 国产九九视频在线观看 | 欧美一级在线观看视频 | 男人天堂网av | 亚洲欧洲精品一区二区三区 | 国产在视频线精品视频www666 | 久久就是精品 |