Дано: Python 3.7, веб-сервер flask под gunicorn.
На каждый запрос gunicorn создаёт отдельный поток (модуль threading), но по каким-то причинам gunicorn закрывает не все потоки, после исполнения кода. В итоге получается такая картина:
[item.name for item in threading.enumerate()]
['MainThread', 'WorkerThread1', 'WorkerThread2', 'WorkerThread3', 'WorkerThread4', 'WorkerThread5', 'WorkerThread6', 'WorkerThread7', 'WorkerThread8', 'WorkerThread9', 'WorkerThread10', 'WorkerThread11', 'WorkerThread12', 'WorkerThread13', 'WorkerThread14', 'WorkerThread15', 'WorkerThread16', 'WorkerThread17', ...
Через какое-то время эти незакрытые потоки накапливаются и в итоге дают большую нагрузку на ЦП.
Почему они не закрываются? Как это исправить?