mirror of https://github.com/python/cpython.git
asyncio.tasks: Fix CoroWrapper to workaround yield-from bug in CPython < 3.4.1
Closes issue #21209.
This commit is contained in:
parent
cfdd0161ac
commit
f15f7484bb
|
@ -49,7 +49,10 @@ def __iter__(self):
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
return next(self.gen)
|
return next(self.gen)
|
||||||
|
|
||||||
def send(self, value):
|
def send(self, *value):
|
||||||
|
# We use `*value` because of a bug in CPythons prior
|
||||||
|
# to 3.4.1. See issue #21209 and test_yield_from_corowrapper
|
||||||
|
# for details. This workaround should be removed in 3.5.0.
|
||||||
return self.gen.send(value)
|
return self.gen.send(value)
|
||||||
|
|
||||||
def throw(self, exc):
|
def throw(self, exc):
|
||||||
|
|
|
@ -1386,6 +1386,31 @@ def test_wait_invalid_args(self):
|
||||||
self.assertRaises(ValueError, self.loop.run_until_complete,
|
self.assertRaises(ValueError, self.loop.run_until_complete,
|
||||||
asyncio.wait([], loop=self.loop))
|
asyncio.wait([], loop=self.loop))
|
||||||
|
|
||||||
|
def test_yield_from_corowrapper(self):
|
||||||
|
old_debug = asyncio.tasks._DEBUG
|
||||||
|
asyncio.tasks._DEBUG = True
|
||||||
|
try:
|
||||||
|
@asyncio.coroutine
|
||||||
|
def t1():
|
||||||
|
return (yield from t2())
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def t2():
|
||||||
|
f = asyncio.Future(loop=self.loop)
|
||||||
|
asyncio.Task(t3(f), loop=self.loop)
|
||||||
|
return (yield from f)
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def t3(f):
|
||||||
|
f.set_result((1, 2, 3))
|
||||||
|
|
||||||
|
task = asyncio.Task(t1(), loop=self.loop)
|
||||||
|
val = self.loop.run_until_complete(task)
|
||||||
|
self.assertEqual(val, (1, 2, 3))
|
||||||
|
finally:
|
||||||
|
asyncio.tasks._DEBUG = old_debug
|
||||||
|
|
||||||
|
|
||||||
class GatherTestsBase:
|
class GatherTestsBase:
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
@ -147,6 +147,9 @@ Library
|
||||||
positional-or-keyword arguments passed as keyword arguments become
|
positional-or-keyword arguments passed as keyword arguments become
|
||||||
keyword-only.
|
keyword-only.
|
||||||
|
|
||||||
|
- Issue #21209: Fix asyncio.tasks.CoroWrapper to workaround a bug
|
||||||
|
in yield-from implementation in CPythons prior to 3.4.1.
|
||||||
|
|
||||||
IDLE
|
IDLE
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue