Сообщить об ошибке.

Функция wait() модуля concurrent.futures в Python

Ожидает, пока завершатся все задачи в потоках/процессах

Синтаксис:

import concurrent.futures as pool

pool.wait(fs, timeout=None, return_when=ALL_COMPLETED)

Параметры:

  • fs - итерируемая последовательность объектов Future,
  • timeout=None - время ожидания завершения работы всех потоков/процессов,
  • return_when=ALL_COMPLETED - когда эта функция должна возвратить результат.

Возвращаемое значение:

Описание:

Функция wait() модуля concurrent.futures ожидает, пока завершатся все экземпляры Future (возможно, созданные разными экземплярами Executor), заданные аргументом fs.

Возвращает именованный кортеж из двух множеств.

  • Первое множество с именем done и содержит объекты Future, которые завершились (завершенные или отмененные) до завершения ожидания.
  • Второе множество с именем not_done содержит незавершенные объекты Future (ожидающие или работающие).

Аргумент timeout можно использовать для управления максимальным количеством секунд ожидания перед возвратом результатов. Аргумент timeout может быть int или float. Если timeout не указан или равен None, то время ожидания не ограничено.

Аргумент return_when указывает, когда эта функция должна возвратить результат. Это должна быть одна из следующих констант:

КонстантаОписание
FIRST_COMPLETEDФункция начнет возвращать результаты, когда любой объект `Future` завершится или будет отменен.
FIRST_EXCEPTIONФункция начнет возвращать результаты, когда любой объект `Future` завершится, вызвав исключение. Если объект `Future` не вызывает исключение, то значение константы эквивалентно `ALL_COMPLETED`.
ALL_COMPLETEDФункция начнет возвращать результаты, когда все объект `Future` завершатся или будут отменены.

Пример работы функции модуля wait().

import concurrent.futures as pool
import time

def worker(a, b):
    time.sleep(0.5)
    return a / b 

# данные для worker()
data = [(1, 0.3), (2, 0.7), (3, 9), (4, 3)]

# создаем пул из 3-х потоков
with pool.ThreadPoolExecutor(max_workers=3) as executor:
    # создаем список заданий (вызовы worker() с аргументами из data) 
    # для потоков (список объектов 'Future'), 
    # которые встают в очередь на выполнение 
    futures = [executor.submit(worker, a, b) for a, b in data]

    # в функцию `wait` передаем список (очередь) 
    # созданных заданий, которая в свою очередь 
    # выдает именованный кортеж с двумя 
    # множествами 'Future' - (done={}, not_done={})
    ok = pool.wait(futures)
    
    for future in ok.done:
        # получаем результат
        result = future.result()
        print(f'Результат {result}')

# Результат 1.3333333333333333
# Результат 3.3333333333333335
# Результат 2.857142857142857
# Результат 0.3333333333333333