Source code for twindb_backup.modifiers.parallel_compressor

# -*- coding: utf-8 -*-
"""
Module defines modifier that compresses a stream with pigz
"""
from psutil import cpu_count

from twindb_backup.modifiers.base import Modifier

DEFAULT_THREADS = cpu_count() - 1


[docs]class ParallelCompressor(Modifier): """ Modifier that compresses the input_stream with pigz. """ def __init__( self, input_stream, program="pigz", threads=DEFAULT_THREADS, level=9, suffix=".gz", ): """ Modifier that compresses in multiple threads. :param input_stream: Input stream. Must be file object :param threads: number of threads to use (defaults to total-1) :type threads: int :param level: compression level from 1 to 9 (fastest to best) :type level: int """ super(ParallelCompressor, self).__init__(input_stream) self._threads = threads self._level = level self._program = program self._suffix = suffix @property def suffix(self): """File name suffix, specific for the compression tool""" return self._suffix @property def _modifier_cmd(self): """get compression program cmd""" return [ self._program, "-{0}".format(self._level), "-p", str(self._threads), "-c", "-", ] @property def _unmodifier_cmd(self): """get decompression program cmd""" return [self._program, "-p", str(self._threads), "-d", "-c"]