После выполнения кода в отдельном треде в ThreadPoolExecutor он не убивается

У меня есть веб приложение на aiohttp, в котором на фоне каждую минуту обновляется кэш походом в сторонний ресурс. Все это делается асинхронно и при получении кэш записывается в файл в отдельном треде таким кодом. Вообще такая же ситуация возникает даже просто с десериализацией json в отдельном треде ответа стороннего ресурса

def _save_to_file(self, values):
    try:
        self._make_dirs()
        with tempfile.NamedTemporaryFile(
                mode='w', dir=self._snapshot_path, delete=False,
        ) as tmp:
            json.dump(values, tmp)
            os.replace(tmp.name, self._full_snapshot_path)
    except (OSError, IOError) as exc:
        user = getpass.getuser()
        # avoid file access error on local run
        if user == USER:
            raise
        else:
            logger.info(
                'do not write snapshot file, user %s: %s', user, exc,
            )

await asyncio.get_event_loop().run_in_executor(
    None, _save_to_file, values,
)

Но в итоге процесс порождает потоки, которые в последствие не умирают и их число неограниченно растет, пока не прибьется весь процесс. Наблюдал за периодичностью возникновения потоков с помощью команды ниже и время совпадает с обновлением кеша

watch ps -eo pid,nlwp,command

Ответы (0 шт):