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