gh-77714: Implement as_completed as an asynchronous generator by mivade · Pull Request #10251 · python/cpython (original) (raw)
The existing implementation yields futures which you must await
.
The idea is to yield futures which are guaranteed to have completed, as they complete. This is how concurrent.futures.as_completed
works, but the benefit goes beyond consistency with concurrent.futures
. It allows code to be robust in the face of exceptions raised by futures, and to associate side data with the futures and retrieve it from as_completed
. For example, when yielding futures, this usage example immediately becomes usable with asyncio.as_completed
, just changing for
to async for
.
The sync version doesn't support that usage because it gives you a different future than any of those passed to as_completed
. Among other things, that's what prompted the BPO issue.
As far as I can tell, your implementation can easily support that, just by removing .result()
at the yield
point.