From 28e7c014c804c67889e870be9b1dbded0146bfac Mon Sep 17 00:00:00 2001 From: grossmj Date: Mon, 16 Feb 2026 18:28:11 +0800 Subject: [PATCH] Enable parallel compression with zstandard. Fixes #2324 --- gns3server/controller/import_project.py | 1 - gns3server/utils/asyncio/aiozipstream.py | 7 +++---- gns3server/utils/zipfile_zstd/_zipfile.py | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/gns3server/controller/import_project.py b/gns3server/controller/import_project.py index 4af3717ce..4e882ae75 100644 --- a/gns3server/controller/import_project.py +++ b/gns3server/controller/import_project.py @@ -17,7 +17,6 @@ import os import sys -import stat import json import uuid import shutil diff --git a/gns3server/utils/asyncio/aiozipstream.py b/gns3server/utils/asyncio/aiozipstream.py index 4850eb3b0..c8f69c8e2 100644 --- a/gns3server/utils/asyncio/aiozipstream.py +++ b/gns3server/utils/asyncio/aiozipstream.py @@ -71,10 +71,9 @@ def _get_compressor(compress_type, compresslevel=None): elif compress_type == ZIP_ZSTANDARD: import zstandard as zstd if compresslevel is not None: - #params = zstd.ZstdCompressionParameters.from_level(compresslevel, threads=-1, enable_ldm=True, window_log=31) - #return zstd.ZstdCompressor(compression_params=params).compressobj() - return zstd.ZstdCompressor(level=compresslevel).compressobj() - return zstd.ZstdCompressor().compressobj() + # for threads param a value of -1 means to set the number of threads to the number of detected logical CPUs + return zstd.ZstdCompressor(level=compresslevel, threads=-1).compressobj() + return zstd.ZstdCompressor(threads=-1).compressobj() else: return None diff --git a/gns3server/utils/zipfile_zstd/_zipfile.py b/gns3server/utils/zipfile_zstd/_zipfile.py index 5748ad94d..c082fe49f 100644 --- a/gns3server/utils/zipfile_zstd/_zipfile.py +++ b/gns3server/utils/zipfile_zstd/_zipfile.py @@ -42,7 +42,7 @@ if 'compresslevel' in inspect.signature(zipfile._get_compressor).parameters: 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=-1).compressobj() else: return patch.originals['_get_compressor'](compress_type, compresslevel=compresslevel) else: @@ -51,7 +51,7 @@ else: 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=-1).compressobj() else: return patch.originals['_get_compressor'](compress_type)