Używam modułu pythonów bz2 do generowania (i kompresowania) dużego pliku jsonl (skompresowanego bzip2 17 GB).Czy jest możliwe zrównoleglenie dekompresji bz2?
Jednak, gdy później próbuję dekompresować go za pomocą pbzip2, wydaje się, że tylko jeden rdzeń CPU do dekompresji, który jest dość powolny.
Kiedy kompresuję go za pomocą pbzip2, może on korzystać z wielu rdzeni podczas dekompresji. Czy istnieje sposób kompresji w Pythonie w formacie kompatybilnym z pbzip2?
import bz2,sys
from Queue import Empty
#...
compressor = bz2.BZ2Compressor(9)
f = open(path, 'a')
try:
while 1:
m = queue.get(True, 1*60)
f.write(compressor.compress(m+"\n"))
except Empty, e:
pass
except Exception as e:
traceback.print_exc()
finally:
sys.stderr.write("flushing")
f.write(compressor.flush())
f.close()
Z tego, co przeczytałem, równoległe operacje na dyskach I/O to [zły pomysł] (https://stackoverflow.com/a/1993707/3727854). Biorąc to pod uwagę [ta odpowiedź może być istotna] (https://stackoverflow.com/a/42012661/3727854) na to pytanie. –
@JamesDraper dysku I/O nie będzie czynnikiem ograniczającym ... obliczenia bzip są powolne – o11c
@worenga Zwróć uwagę, że jsonl jest niebezpiecznym formatem, jeśli możesz użyć liczb najwyższego poziomu, ponieważ są one podatne na obcięcie. Json-seq rozwiązuje ten problem, nakazując błąd. – o11c