bpo-42230: Improve asyncio documentation regarding accepting sets vs iterables (GH-23073)
People call wait() and as_completed() with various non-set iterables, a list should be the most common but there are others as well[1]. Considering typeshed also documents wait()[2] and as_completed()[3] as accepting arbitrary iterables I think it's a good idea to document the status quo better. [1] https://github.com/aio-libs/aiokafka/pull/672 [2]620989bac5/stdlib/3/asyncio/tasks.pyi (L161)
[3]620989bac5/stdlib/3/asyncio/tasks.pyi (L40)
This commit is contained in:
parent
6e8dcdaaa4
commit
3d86d090dc
|
@ -504,10 +504,10 @@ Waiting Primitives
|
||||||
return_when=ALL_COMPLETED)
|
return_when=ALL_COMPLETED)
|
||||||
|
|
||||||
Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
|
Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
|
||||||
set concurrently and block until the condition specified
|
iterable concurrently and block until the condition specified
|
||||||
by *return_when*.
|
by *return_when*.
|
||||||
|
|
||||||
The *aws* set must not be empty.
|
The *aws* iterable must not be empty.
|
||||||
|
|
||||||
Returns two sets of Tasks/Futures: ``(done, pending)``.
|
Returns two sets of Tasks/Futures: ``(done, pending)``.
|
||||||
|
|
||||||
|
@ -593,9 +593,9 @@ Waiting Primitives
|
||||||
.. function:: as_completed(aws, \*, loop=None, timeout=None)
|
.. function:: as_completed(aws, \*, loop=None, timeout=None)
|
||||||
|
|
||||||
Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
|
Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
|
||||||
set concurrently. Return an iterator of coroutines.
|
iterable concurrently. Return an iterator of coroutines.
|
||||||
Each coroutine returned can be awaited to get the earliest next
|
Each coroutine returned can be awaited to get the earliest next
|
||||||
result from the set of the remaining awaitables.
|
result from the iterable of the remaining awaitables.
|
||||||
|
|
||||||
Raises :exc:`asyncio.TimeoutError` if the timeout occurs before
|
Raises :exc:`asyncio.TimeoutError` if the timeout occurs before
|
||||||
all Futures are done.
|
all Futures are done.
|
||||||
|
|
|
@ -373,7 +373,7 @@ ALL_COMPLETED = concurrent.futures.ALL_COMPLETED
|
||||||
async def wait(fs, *, loop=None, timeout=None, return_when=ALL_COMPLETED):
|
async def wait(fs, *, loop=None, timeout=None, return_when=ALL_COMPLETED):
|
||||||
"""Wait for the Futures and coroutines given by fs to complete.
|
"""Wait for the Futures and coroutines given by fs to complete.
|
||||||
|
|
||||||
The sequence futures must not be empty.
|
The fs iterable must not be empty.
|
||||||
|
|
||||||
Coroutines will be wrapped in Tasks.
|
Coroutines will be wrapped in Tasks.
|
||||||
|
|
||||||
|
@ -573,7 +573,7 @@ def as_completed(fs, *, loop=None, timeout=None):
|
||||||
Note: The futures 'f' are not necessarily members of fs.
|
Note: The futures 'f' are not necessarily members of fs.
|
||||||
"""
|
"""
|
||||||
if futures.isfuture(fs) or coroutines.iscoroutine(fs):
|
if futures.isfuture(fs) or coroutines.iscoroutine(fs):
|
||||||
raise TypeError(f"expect a list of futures, not {type(fs).__name__}")
|
raise TypeError(f"expect an iterable of futures, not {type(fs).__name__}")
|
||||||
|
|
||||||
from .queues import Queue # Import here to avoid circular import problem.
|
from .queues import Queue # Import here to avoid circular import problem.
|
||||||
done = Queue(loop=loop)
|
done = Queue(loop=loop)
|
||||||
|
|
Loading…
Reference in New Issue