Каков наилучший способ реализовать бесконечный цикл с помощью ThreadPoolExecutor?

#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. Хороший момент. Исполнитель будет повторно использовать рабочие потоки при отправке новых задач. Все потоки будут уничтожены при завершении процесса.