@Marvin which is best practice?
- Fail-fast by completion time (earliest failure raises immediately)
from prefect.futures import as_completed
futs = [task.submit(i) for i in range(10)]
for f in as_completed(futs):
f.result() # raises as soon as a failing future completes
- Resolve a collection (may block in traversal order, not completion order)
from prefect.futures import resolve_futures_to_results
futs = [task.submit(i) for i in range(10)]
results = resolve_futures_to_results(futs) # raises when it reaches a failed future
- Wait for all, then raise if any failed (no fail-fast)
from prefect import futures
futs = [task.submit(i) for i in range(10)]
done, _ = futures.wait(futs)
for f in done:
f.result() # raises on the first failed future you iterate over