Исключение OSError: неверный поток данных при попытке распаковки блоков bz2 параллельно - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь распараллелить чтение очень большого файла bz2 из чанка URL по чанку и распаковывать каждый чанк отдельно.Когда я пытаюсь распаковать кусок вне функции рабочего процесса, он работает нормально.Но когда дочерний процесс пытается распаковать тот же кусок, он генерирует исключение OSError: Invalid data stream.

Код ниже - полный код.Я использую Python 3.5.2.

import bz2
import urllib3
import multiprocessing as mp

def parse_chunk():
    decompressor = bz2.BZ2Decompressor()
    global q
    while True:
        chunk = q.get()
        if chunk is None:
            break
        # Decompression here fails
        decompressed_chunk = decompressor.decompress(chunk).decode("utf-8")

decompressor_main = bz2.BZ2Decompressor()
http = urllib3.PoolManager()
r = http.request(
     'GET',
     'https://url_to_file.bz2',
     preload_content=False)
last_line = False

q = mp.Queue(maxsize=5)
pool = mp.Pool(5, initializer=parse_chunk)
for chunk in r.stream(1024*100):
    # Decompression here works
    decompressed_chunk = decompressor_main.decompress(chunk).decode("utf-8")
    q.put(chunk)
q.put(None)
...