#python #python-3.x #loops #threadpoolexecutor
#python #python-3.x #циклы #threadpoolexecutor
Вопрос:
Мой код использует ThreadPoolExecutor для обработки нескольких задач. Одним из основных требований является то, что он выполняется бесконечно. Это моя текущая реализация:
def process_something():
with ThreadPoolExecutor(max_workers=MAX_WORKERS1) as executor1:
with ThreadPoolExecutor(max_workers=MAX_WORKERS2) as executor2:
while True:
func1_returns = executor1.map(func1, arg1)
func2_returns = executor2.map(func2, arg2)
# code for processing func returns
time.sleep(1)
Есть ли лучший способ реализовать это? Будет ли это возможной утечкой памяти, поскольку исполнители находятся в бесконечном цикле?
Ответ №1:
Пул потоков уже имеет несколько потоков для использования. Вам не нужно создавать несколько пулов.
def process_something():
with ThreadPoolExecutor(max_workers=MAX_WORKERS1) as executor1:
while True:
func1_returns = executor1.submit(func1, arg1)
func2_returns = executor1.submit(func2, arg2)
# code for processing func returns
time.sleep(1)
В пуле потоков не должно быть утечки памяти. После завершения инструкции потоки будут собраны в мусор with
.
Комментарии:
1. Как будет работать сборщик мусора, поскольку исполнитель находится в бесконечном цикле (пока True)?
2. Хороший момент. Исполнитель будет повторно использовать рабочие потоки при отправке новых задач. Все потоки будут уничтожены при завершении процесса.