Wie kann eine Speicherduplizierung pro Prozess vermieden werden, wenn Rapidgzip mit Multiprocessing in Python verwendet Python

Python-Programme
Anonymous
 Wie kann eine Speicherduplizierung pro Prozess vermieden werden, wenn Rapidgzip mit Multiprocessing in Python verwendet

Post by Anonymous »

Ich habe eine Python-Datei:

Code: Select all

from concurrent.futures import ProcessPoolExecutor
import tarfile, rapidgzip

def processNdjson(ndjsonName):
with rapidgzip.open(inTarDir) as myZip:
myZip.import_index(rapidgzipDir)
with tarfile.open(fileobj=myZip, mode="r:*") as f:
member = f.getmember(ndjsonName)
dataFile = f.extractfile(member)
for oneLine in dataFile:
# process oneLine here

if __name__ == "__main__":
inTarDir = ...
rapidgzipDir = ...
nCore = 5
ndjsonNames = ["name1.ndjson", "name2.ndjson"]

with ProcessPoolExecutor(nCore) as pool:
results = pool.map(worker, ndjsonNames)
Oben
  • Code: Select all

    inTarDir
    ist das Verzeichnis einer .tar.gz-Datei, die mehrere .ndjson-Dateien enthält.
  • Code: Select all

    rapidgzipDir
    ist die von rapidgzip zu verwendende Vorindexdatei. Dies ermöglicht einen schnellen Direktzugriff und ist ein direkter Ersatz für die in Python integrierte gzip.GzipFile.
  • Jeder Prozess wird

Code: Select all

with rapidgzip.open(inTarDir) as myZip:
myZip.import_index(rapidgzipDir)
with tarfile.open(fileobj=myZip, mode="r:*") as f:
Meine Sorge: Jeder Befehl myZip.import_index(rapidgzipDir) beansprucht eine bestimmte Menge RAM (z. B. 500 MB für eine 20 GB große .tar.gz-Datei). Dies wird linear mit nCore wachsen.
Gibt es eine Möglichkeit, den mehrfachen Import desselben rapidgzipDir zu vermeiden?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post