Странное размножение потоков в python requests_future
Обнаружил следующее:
import requests
from requests_futures.sessions import FuturesSession
from concurrent.futures import ThreadPoolExecutor
XML = '<TAG>bla</TAG>'
res = []
for i in range(150):
session = FuturesSession()
res.append(session.post(u'http://192.168.1.100:9000/Service/rest/BlaValidation', headers={}, data=XML))
for j in range(150):
res[j].result()
res = []
print(threading.active_count())
В результате, несмотря на то, что объект сессии, объекты возвратов, а также все объекты из futures уничтожены, на экран выведется 151, т.е. 150 потоков, порожденных в результате работы (и да, их породится 150, т.е. каждая новая сессия будет создавать поток!).
Возможно ли это как-то пофиксить?
Если я заменяю формирование сессии следующим образом:
session = FuturesSession(executor=ThreadPoolExecutor(max_workers=12))
Потоков все равно будет 151. По понятной причине. Единственный способ ограничить количество потоков - это вынести формирование сессии вне цикла, тогда даже после "смерти" объекта сессии останется 12 порожденных потоков.
Можно ли как-то все-таки завершить потоки? Потому что моя архитектура процесса предусматривает все же множественное создание разных сессий, а количество возможных потоков на процесс x32 не так велико, учитывая стек и "обвязку". И когда количество потоков превысит 500-700, дальше процесс перестанет работать.