Как избежать дублирования памяти для каждого процесса при использовании RapidGZIP с многопроцессорной обработкой в ​​PytPython

Программы на Python
Ответить
Anonymous
 Как избежать дублирования памяти для каждого процесса при использовании RapidGZIP с многопроцессорной обработкой в ​​Pyt

Сообщение Anonymous »

У меня есть файл Python:

Код: Выделить всё

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)
Выше,
  • Код: Выделить всё

    inTarDir
    — это каталог файла .tar.gz, содержащего несколько файлов .ndjson.
  • Код: Выделить всё

    rapidgzipDir
    — это файл преиндекса, который будет использоваться RapidGZIP. Это обеспечивает быстрый произвольный доступ и является прямой заменой встроенного в Python gzip.GzipFile.
  • Каждый процесс будет

Код: Выделить всё

with rapidgzip.open(inTarDir) as myZip:
myZip.import_index(rapidgzipDir)
with tarfile.open(fileobj=myZip, mode="r:*") as f:
Мое беспокойство: каждая команда myZip.import_index(rapidgzipDir) будет занимать определенный объем оперативной памяти (например, 500 МБ для файла .tar.gz размером 20 ГБ). Это будет расти линейно с nCore.
Есть ли способ избежать многократного импорта одного и того же RapidgzipDir?

Подробнее здесь: https://stackoverflow.com/questions/798 ... multiproce
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»