diff --git a/mitogen/__init__.py b/mitogen/__init__.py index 26e051667..3ea3b8252 100644 --- a/mitogen/__init__.py +++ b/mitogen/__init__.py @@ -61,6 +61,7 @@ import os _default_profiling = os.environ.get('MITOGEN_PROFILING') is not None +_compression_level = int(os.environ.get('MITOGEN_COMPRESSION_LEVEL', '9'), 10) del os diff --git a/mitogen/core.py b/mitogen/core.py index 3bd23b35d..4ad4d590c 100644 --- a/mitogen/core.py +++ b/mitogen/core.py @@ -1334,13 +1334,14 @@ class Importer(object): if sys.version_info >= (3, 0): ALWAYS_BLACKLIST += ['cStringIO'] - def __init__(self, router, context, core_src, whitelist=(), blacklist=()): + def __init__(self, router, context, core_src, whitelist=(), blacklist=(), compression_level=None): self._log = logging.getLogger('mitogen.importer') self._context = context self._present = {'mitogen': self.MITOGEN_PKG_CONTENT} self._lock = threading.Lock() self.whitelist = list(whitelist) or [''] self.blacklist = list(blacklist) + self.ALWAYS_BLACKLIST + self.compression_level = compression_level # Preserve copies of the original server-supplied whitelist/blacklist # for later use by children. @@ -1356,7 +1357,7 @@ def __init__(self, router, context, core_src, whitelist=(), blacklist=()): 'mitogen.core', None, 'x/mitogen/core.py', - zlib.compress(core_src, 9), + zlib.compress(core_src, self.compression_level), [], ) self._install_handler(router) @@ -4155,6 +4156,7 @@ def _setup_importer(self): core_src, self.config.get('whitelist', ()), self.config.get('blacklist', ()), + compression_level = self.config['compression_level'], ) self.importer = importer @@ -4185,6 +4187,7 @@ def _setup_globals(self): mitogen.context_id = self.config['context_id'] mitogen.parent_ids = self.config['parent_ids'][:] mitogen.parent_id = mitogen.parent_ids[0] + mitogen._compression_level = self.config['compression_level'] def _nullify_stdio(self): """ diff --git a/mitogen/master.py b/mitogen/master.py index 03c897711..d27f324b9 100644 --- a/mitogen/master.py +++ b/mitogen/master.py @@ -1152,7 +1152,7 @@ def _build_tuple(self, fullname): if fullname == '__main__': source = self.neutralize_main(path, source) - compressed = mitogen.core.Blob(zlib.compress(source, 9)) + compressed = mitogen.core.Blob(zlib.compress(source, mitogen._compression_level)) related = [ to_text(name) for name in self._finder.find_related(fullname) diff --git a/mitogen/parent.py b/mitogen/parent.py index 9d1a0ce3c..a9e6d97d5 100644 --- a/mitogen/parent.py +++ b/mitogen/parent.py @@ -57,6 +57,7 @@ # Absolute imports for <2.5. select = __import__('select') +import mitogen import mitogen.core from mitogen.core import b from mitogen.core import bytes_partition @@ -696,7 +697,7 @@ class PartialZlib(object): def __init__(self, s): self.s = s if sys.version_info > (2, 5): - self._compressor = zlib.compressobj(9) + self._compressor = zlib.compressobj(mitogen._compression_level) self._out = self._compressor.compress(s) self._out += self._compressor.flush(zlib.Z_SYNC_FLUSH) else: @@ -708,7 +709,7 @@ def append(self, s): final compressed output. """ if self._compressor is None: - return zlib.compress(self.s + s, 9) + return zlib.compress(self.s + s, mitogen._compression_level) else: compressor = self._compressor.copy() out = self._out @@ -1508,6 +1509,7 @@ def get_econtext_config(self): 'whitelist': self._router.get_module_whitelist(), 'blacklist': self._router.get_module_blacklist(), 'max_message_size': self.options.max_message_size, + 'compression_level': mitogen._compression_level, 'version': mitogen.__version__, }