mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
bpo-34790: Implement deprecation of passing coroutines to asyncio.wait() (GH-16977)
This commit is contained in:
parent
88dce26da6
commit
89aa7f0ede
3 changed files with 28 additions and 5 deletions
|
@ -290,6 +290,9 @@ Deprecated
|
||||||
predicable behavior.
|
predicable behavior.
|
||||||
(Contributed by Serhiy Storchaka in :issue:`38371`.)
|
(Contributed by Serhiy Storchaka in :issue:`38371`.)
|
||||||
|
|
||||||
|
* The explicit passing of coroutine objects to :func:`asyncio.wait` has been
|
||||||
|
deprecated and will be removed in version 3.11.
|
||||||
|
(Contributed by Yury Selivanov and Kyle Stanley in :issue:`34790`.)
|
||||||
|
|
||||||
Removed
|
Removed
|
||||||
=======
|
=======
|
||||||
|
|
|
@ -424,6 +424,12 @@ async def wait(fs, *, loop=None, timeout=None, return_when=ALL_COMPLETED):
|
||||||
"and scheduled for removal in Python 3.10.",
|
"and scheduled for removal in Python 3.10.",
|
||||||
DeprecationWarning, stacklevel=2)
|
DeprecationWarning, stacklevel=2)
|
||||||
|
|
||||||
|
if any(coroutines.iscoroutine(f) for f in set(fs)):
|
||||||
|
warnings.warn("The explicit passing of coroutine objects to "
|
||||||
|
"asyncio.wait() is deprecated since Python 3.8, and "
|
||||||
|
"scheduled for removal in Python 3.11.",
|
||||||
|
DeprecationWarning, stacklevel=2)
|
||||||
|
|
||||||
fs = {ensure_future(f, loop=loop) for f in set(fs)}
|
fs = {ensure_future(f, loop=loop) for f in set(fs)}
|
||||||
|
|
||||||
return await _wait(fs, timeout, return_when, loop)
|
return await _wait(fs, timeout, return_when, loop)
|
||||||
|
|
|
@ -979,12 +979,12 @@ class BaseTaskTests:
|
||||||
def coro(s):
|
def coro(s):
|
||||||
return s
|
return s
|
||||||
c = coro('test')
|
c = coro('test')
|
||||||
|
task = self.new_task(
|
||||||
task =self.new_task(
|
|
||||||
self.loop,
|
self.loop,
|
||||||
asyncio.wait([c, c, coro('spam')]))
|
asyncio.wait([c, c, coro('spam')]))
|
||||||
|
|
||||||
done, pending = self.loop.run_until_complete(task)
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
done, pending = self.loop.run_until_complete(task)
|
||||||
|
|
||||||
self.assertFalse(pending)
|
self.assertFalse(pending)
|
||||||
self.assertEqual(set(f.result() for f in done), {'test', 'spam'})
|
self.assertEqual(set(f.result() for f in done), {'test', 'spam'})
|
||||||
|
@ -1346,7 +1346,9 @@ class BaseTaskTests:
|
||||||
futs = list(asyncio.as_completed(fs, loop=loop))
|
futs = list(asyncio.as_completed(fs, loop=loop))
|
||||||
self.assertEqual(len(futs), 2)
|
self.assertEqual(len(futs), 2)
|
||||||
waiter = asyncio.wait(futs)
|
waiter = asyncio.wait(futs)
|
||||||
done, pending = loop.run_until_complete(waiter)
|
# Deprecation from passing coros in futs to asyncio.wait()
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
done, pending = loop.run_until_complete(waiter)
|
||||||
self.assertEqual(set(f.result() for f in done), {'a', 'b'})
|
self.assertEqual(set(f.result() for f in done), {'a', 'b'})
|
||||||
|
|
||||||
def test_as_completed_duplicate_coroutines(self):
|
def test_as_completed_duplicate_coroutines(self):
|
||||||
|
@ -1751,7 +1753,8 @@ class BaseTaskTests:
|
||||||
|
|
||||||
async def outer():
|
async def outer():
|
||||||
nonlocal proof
|
nonlocal proof
|
||||||
d, p = await asyncio.wait([inner()])
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
d, p = await asyncio.wait([inner()])
|
||||||
proof += 100
|
proof += 100
|
||||||
|
|
||||||
f = asyncio.ensure_future(outer(), loop=self.loop)
|
f = asyncio.ensure_future(outer(), loop=self.loop)
|
||||||
|
@ -3307,6 +3310,17 @@ class WaitTests(test_utils.TestCase):
|
||||||
self.loop.run_until_complete(
|
self.loop.run_until_complete(
|
||||||
asyncio.wait_for(coroutine_function(), 0.01, loop=self.loop))
|
asyncio.wait_for(coroutine_function(), 0.01, loop=self.loop))
|
||||||
|
|
||||||
|
def test_coro_is_deprecated_in_wait(self):
|
||||||
|
# Remove test when passing coros to asyncio.wait() is removed in 3.11
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
self.loop.run_until_complete(
|
||||||
|
asyncio.wait([coroutine_function()]))
|
||||||
|
|
||||||
|
task = self.loop.create_task(coroutine_function())
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
self.loop.run_until_complete(
|
||||||
|
asyncio.wait([task, coroutine_function()]))
|
||||||
|
|
||||||
|
|
||||||
class CompatibilityTests(test_utils.TestCase):
|
class CompatibilityTests(test_utils.TestCase):
|
||||||
# Tests for checking a bridge between old-styled coroutines
|
# Tests for checking a bridge between old-styled coroutines
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue