91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python多線程如何分塊讀取文件

發布時間:2021-07-26 10:14:22 來源:億速云 閱讀:217 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關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多線程如何分塊讀取文件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淮阳县| 元氏县| 常德市| 大石桥市| 龙胜| 汶上县| 微博| 博爱县| 四会市| 八宿县| 南开区| 广西| 彭水| 手游| 平乐县| 舞阳县| 青浦区| 盱眙县| 司法| 石台县| 伊宁市| 京山县| 阜康市| 牡丹江市| 和硕县| 喜德县| 邹城市| 合作市| 肇源县| 齐河县| 蒲江县| 互助| 宁乡县| 咸阳市| 双江| 米泉市| 正定县| 手机| 微博| 麦盖提县| 克山县|