Python 3.2+concurrent.futuresфункция
concurrent.futures.as_completed()
пул задач
Возвращает итератор, который отдаёт Future по мере их завершения — не в порядке создания, а в порядке готовности.
Синтаксис
from concurrent.futures import as_completed
for future in as_completed(fs): ...
Итератор отдаёт сами объекты Future, а не результаты, и порядок теряется — чтобы понять, к какому входу относится ответ, обычно заводят словарь future -> аргумент. Берите as_completed, когда хотите обрабатывать ответы по мере готовности; если нужен порядок исходных данных, проще executor.map(). Необязательный timeout отсчитывается от вызова as_completed, а не от каждой задачи по отдельности.
Примеры
from concurrent.futures import ThreadPoolExecutor, as_completed
import time, random
def task(n):
time.sleep(random.random())
return n * 2
with ThreadPoolExecutor() as ex:
futures = [ex.submit(task, i) for i in range(5)]
for f in as_completed(futures):
print(f.result()) # выводит по мере готовности
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности