StreamThread
А каким образом скормить считанный “кусок”, представляющий из себя последовательность байт, в вызов 7z'па принимающего хендл файла на диске? Загрузить кусок во временный файл?
Да, поначалу в файл сохраняешь, потом вызываешь 7z для этого файла и пишешь в файл вывода, потом читаешь файл вывода. Когда всё работает, оптимизируешь это, чтобы было без сохранения в файлы. У 7z есть опции для ввода данных из stdin и вывода данных в stdout. Для всех операций используешь subprocess.Popen(). Делаешь класс, который выполняет compress(ifname, ofname) и decompress(ifname, ofname), используя на низком уровне вызовы программы 7z. Если найдёшь способ без 7z, то свой класс просто перепишешь на низком уровне с вызовов 7z на найденный способ. То есть программа не будет знать, что используется 7z, так как будет обращаться только с объектом твоего класса, который “как-то неизвестно” запаковывает и распаковывает данные.