Ich kenne keine pigz
Schnittstelle für Python off-Hand, aber es ist nicht so schwer zu schreiben, wenn Sie es wirklich brauchen. Python's zlib
module ermöglicht das Komprimieren beliebiger Bytes, und the pigz
man page beschreibt das System für die Parallelisierung der Komprimierung und das Ausgabeformat bereits.
Wenn Sie wirklich parallele Kompression benötigen, soll es möglich sein, eine pigz
gleichwertig mit zlib
zu implementieren Brocken in multiprocessing.dummy.Pool.imap
gewickelt zu komprimieren (multiprocessing.dummy
die Thread-backed-Version des multiprocessing
API, so dass Sie nicht massiv IPC Kosten entstünden Senden von Blöcken an und von den Arbeitern), um die Komprimierung parallel zu machen. Da zlib
eines der wenigen integrierten Module ist, das die GIL während der CPU-gebundenen Arbeit freigibt, könnten Sie tatsächlich von der Thread-basierten Parallelität profitieren.
Beachten Sie, dass in der Praxis, wenn der Komprimierungsgrad nicht so hoch ist, I/O ist oft ähnlich (in der Größenordnung oder so) Kosten für die tatsächliche zlib
Kompression; Wenn Ihre Datenquelle die Threads nicht schneller füttern kann, als sie komprimieren, werden Sie durch die Parallelisierung nicht viel gewinnen.
Die Komprimierungsmodule aus der Standardbibliothek sind nicht * pure python *. Wenn Sie sich diese ansehen, werden Sie feststellen, dass sie Schnittstellen zu gemeinsam genutzten Bibliotheken sind (die in C geschrieben sind). –
Und es ist wahrscheinlich Zeit, 'gzip' in Rente zu gehen. Die neue 'zstd'-Komprimierung ist [im Allgemeinen schneller] (http://rsmith.home.xs4all.nl/miscellaneous/evaluating-zstandard-compression.html) als gzip und liefert kleinere komprimierte Dateien. –
@RolandSmith: Natürlich, Es hat auch keine Python-Schnittstelle. Es scheint schneller als 'gzip', aber es gibt viele Optionen für" schneller komprimieren ". 'gzip' haftet zumindest teilweise dank Kompatibilitätsproblemen; Sie können es auf Systemen mit über 10 Jahre alter Hardware/Software dekomprimieren, und es ist wahrscheinlich standardmäßig installiert ('bz2' ist fast so weit verbreitet,' xz' kommt dorthin). Für die Verteilung von Daten an viele Parteien sind Portabilität und Komprimierungsrate wichtiger als Geschwindigkeit. Bei der transienten Kompression schlägt die Geschwindigkeit oft das Kompressionsverhältnis, so dass 'lz4' oder' lzo' 'zstd' schlagen könnten. – ShadowRanger