Я пытаюсь распараллелить чтение очень большого файла 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)