欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python多進(jìn)程分塊讀取超大文件的方法

 更新時(shí)間:2016年04月13日 09:52:10   作者:asdfsx  
這篇文章主要介紹了Python多進(jìn)程分塊讀取超大文件的方法,涉及Python多進(jìn)程操作與文件分塊讀取的相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了Python多進(jìn)程分塊讀取超大文件的方法。分享給大家供大家參考,具體如下:

讀取超大的文本文件,使用多進(jìn)程分塊讀取,將每一塊單獨(dú)輸出成文件

# -*- coding: GBK -*-
import urlparse
import datetime
import os
from multiprocessing import Process,Queue,Array,RLock
"""
多進(jìn)程分塊讀取文件
"""
WORKERS = 4
BLOCKSIZE = 100000000
FILE_SIZE = 0
def getFilesize(file):
  """
    獲取要讀取文件的大小
  """
  global FILE_SIZE
  fstream = open(file,'r')
  fstream.seek(0,os.SEEK_END)
  FILE_SIZE = fstream.tell()
  fstream.close()
def process_found(pid,array,file,rlock):
  global FILE_SIZE
  global JOB
  global PREFIX
  """
    進(jìn)程處理
    Args:
      pid:進(jìn)程編號(hào)
      array:進(jìn)程間共享隊(duì)列,用于標(biāo)記各進(jìn)程所讀的文件塊結(jié)束位置
      file:所讀文件名稱
    各個(gè)進(jìn)程先從array中獲取當(dāng)前最大的值為起始位置startpossition
    結(jié)束的位置endpossition (startpossition+BLOCKSIZE) if (startpossition+BLOCKSIZE)<FILE_SIZE else FILE_SIZE
    if startpossition==FILE_SIZE則進(jìn)程結(jié)束
    if startpossition==0則從0開始讀取
    if startpossition!=0為防止行被block截?cái)嗟那闆r,先讀一行不處理,從下一行開始正式處理
    if 當(dāng)前位置 <=endpossition 就readline
    否則越過邊界,就從新查找array中的最大值
  """
  fstream = open(file,'r')
  while True:
    rlock.acquire()
    print 'pid%s'%pid,','.join([str(v) for v in array])
    startpossition = max(array)      
    endpossition = array[pid] = (startpossition+BLOCKSIZE) if (startpossition+BLOCKSIZE)<FILE_SIZE else FILE_SIZE
    rlock.release()
    if startpossition == FILE_SIZE:#end of the file
      print 'pid%s end'%(pid)
      break
    elif startpossition !=0:
      fstream.seek(startpossition)
      fstream.readline()
    pos = ss = fstream.tell()
    ostream = open('/data/download/tmp_pid'+str(pid)+'_jobs'+str(endpossition),'w')
    while pos<endpossition:
      #處理line
      line = fstream.readline()
      ostream.write(line)
      pos = fstream.tell()
    print 'pid:%s,startposition:%s,endposition:%s,pos:%s'%(pid,ss,pos,pos)
    ostream.flush()
    ostream.close()
    ee = fstream.tell()
  fstream.close()
def main():
  global FILE_SIZE
  print datetime.datetime.now().strftime("%Y/%d/%m %H:%M:%S") 
  file = "/data/pds/download/scmcc_log/tmp_format_2011004.log"
  getFilesize(file)
  print FILE_SIZE
  rlock = RLock()
  array = Array('l',WORKERS,lock=rlock)
  threads=[]
  for i in range(WORKERS):
    p=Process(target=process_found, args=[i,array,file,rlock])
    threads.append(p)
  for i in range(WORKERS):
    threads[i].start()
  for i in range(WORKERS):
    threads[i].join()
  print datetime.datetime.now().strftime("%Y/%d/%m %H:%M:%S") 
if __name__ == '__main__':
  main()

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Kotlin 中的 apply 函數(shù)用法詳解

    Kotlin 中的 apply 函數(shù)用法詳解

    apply 函數(shù)是 Kotlin 中一個(gè)十分方便的工具,它使得對(duì)對(duì)象進(jìn)行初始化和配置變得更加簡(jiǎn)潔、清晰,通過與 Java 的對(duì)比,我們可以看出 Kotlin 在處理類似情況時(shí)具有更高的表現(xiàn)力和簡(jiǎn)潔性,本文給大家介紹Kotlin apply 函數(shù)的用法,感興趣的朋友一起看看吧
    2024-03-03
  • 利用Python寫一場(chǎng)新年煙花秀

    利用Python寫一場(chǎng)新年煙花秀

    這篇文章主要介紹了利用Python寫一場(chǎng)新年煙花秀,可以送給朋友還可以當(dāng)作練習(xí),Python 模塊包括:tkinter、PIL、time、random、math,下面來看一下代碼實(shí)現(xiàn),需要的朋友可以參考一下
    2022-01-01
  • python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換

    python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換

    這篇文章主要介紹了python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 利用Python制作一個(gè)動(dòng)物識(shí)別小程序

    利用Python制作一個(gè)動(dòng)物識(shí)別小程序

    動(dòng)物識(shí)別是計(jì)算機(jī)視覺和模式識(shí)別領(lǐng)域的重要研究方向,它涉及通過圖像或視頻數(shù)據(jù)自動(dòng)識(shí)別和分類不同種類的動(dòng)物,隨著數(shù)字圖像技術(shù)和機(jī)器學(xué)習(xí)方法的快速發(fā)展,動(dòng)物識(shí)別在實(shí)際應(yīng)用中具有廣泛的潛力,本文將給大家介紹如何基于Python制作一個(gè)動(dòng)物識(shí)別小程序
    2023-10-10
  • OpenCV實(shí)戰(zhàn)之OpenCV中的顏色空間

    OpenCV實(shí)戰(zhàn)之OpenCV中的顏色空間

    這篇文章主要介紹了OpenCV實(shí)戰(zhàn)之OpenCV中的顏色空間,解計(jì)算機(jī)視覺中常用的色彩空間,并將其用于基于顏色分割。我們還將用C?++和Python共享演示代碼,下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • python 爬蟲百度地圖的信息界面的實(shí)現(xiàn)方法

    python 爬蟲百度地圖的信息界面的實(shí)現(xiàn)方法

    這篇文章主要介紹了python 爬蟲百度地圖的界面的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 使用Flask集成bootstrap的方法

    使用Flask集成bootstrap的方法

    這篇文章主要介紹了使用Flask集成bootstrap的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python中使用ctypes調(diào)用C++的方法

    Python中使用ctypes調(diào)用C++的方法

    本文主要介紹了Python中使用ctypes調(diào)用C++的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Python下載網(wǎng)易云歌單歌曲的示例代碼

    Python下載網(wǎng)易云歌單歌曲的示例代碼

    這篇文章主要介紹了Python下載網(wǎng)易云歌單歌曲的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • PyCharm設(shè)置護(hù)眼背景色的方法

    PyCharm設(shè)置護(hù)眼背景色的方法

    今天小編就為大家分享一篇PyCharm設(shè)置護(hù)眼背景色的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10

最新評(píng)論