Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ Compression example:
```python
import zipfile_zstd as zipfile

zf = zipfile.ZipFile('/tmp/test.zip', 'w', zipfile.ZIP_ZSTANDARD, compresslevel=19)
zf = zipfile.ZipFile('/tmp/test.zip', 'w', zipfile.ZIP_ZSTANDARD, compresslevel=19, threads = -1)
zf.write('large_file.img')
```

Dictionaries and advanced compression parameters are not supported, sorry.
Set `threads=-1` to automatically detect and use all available logical cores, or set the number of desired threads.
The default is to use **half** of the available logical threads/cores.

Dictionaries and other advanced compression parameters are not yet supported.
1 change: 1 addition & 0 deletions zipfile_zstd/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
from zipfile import (
ZIP_ZSTANDARD,
ZSTANDARD_VERSION,
ZSTANDARD_THREADS
)

16 changes: 12 additions & 4 deletions zipfile_zstd/_zipfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,23 @@
import zstandard as zstd
import threading
import inspect
import os

from ._patcher import patch


zipfile.ZIP_ZSTANDARD = 93
zipfile.compressor_names[zipfile.ZIP_ZSTANDARD] = 'zstandard'
zipfile.ZSTANDARD_VERSION = 20


zipfile.ZSTANDARD_THREADS = (os.cpu_count()+1)//2 # default = half of the available cores

@patch(zipfile, 'ZipFile')
def zstd_constructor(*args, **kwargs):
if kwargs and 'threads' in kwargs:
zipfile.ZSTANDARD_THREADS = kwargs.get('threads')
del kwargs['threads']
return patch.originals['ZipFile'](*args, **kwargs)

@patch(zipfile, '_check_compression')
def zstd_check_compression(compression):
if compression == zipfile.ZIP_ZSTANDARD:
Expand Down Expand Up @@ -44,7 +52,7 @@ def zstd_get_compressor(compress_type, compresslevel=None):
if compress_type == zipfile.ZIP_ZSTANDARD:
if compresslevel is None:
compresslevel = 3
return zstd.ZstdCompressor(level=compresslevel, threads=12).compressobj()
return zstd.ZstdCompressor(level=compresslevel, threads=zipfile.ZSTANDARD_THREADS).compressobj()
else:
return patch.originals['_get_compressor'](compress_type, compresslevel=compresslevel)
else:
Expand All @@ -53,7 +61,7 @@ def zstd_get_compressor(compress_type, compresslevel=None):
if compress_type == zipfile.ZIP_ZSTANDARD:
if compresslevel is None:
compresslevel = 3
return zstd.ZstdCompressor(level=compresslevel, threads=12).compressobj()
return zstd.ZstdCompressor(level=compresslevel, threads=zipfile.ZSTANDARD_THREADS).compressobj()
else:
return patch.originals['_get_compressor'](compress_type)

Expand Down