Merge 3.5
This commit is contained in:
commit
a2149ed1c0
|
@ -488,6 +488,10 @@ def as_completed(fs, *, loop=None, timeout=None):
|
||||||
@coroutine
|
@coroutine
|
||||||
def sleep(delay, result=None, *, loop=None):
|
def sleep(delay, result=None, *, loop=None):
|
||||||
"""Coroutine that completes after a given time (in seconds)."""
|
"""Coroutine that completes after a given time (in seconds)."""
|
||||||
|
if delay == 0:
|
||||||
|
yield
|
||||||
|
return result
|
||||||
|
|
||||||
future = futures.Future(loop=loop)
|
future = futures.Future(loop=loop)
|
||||||
h = future._loop.call_later(delay,
|
h = future._loop.call_later(delay,
|
||||||
future._set_result_unless_cancelled, result)
|
future._set_result_unless_cancelled, result)
|
||||||
|
|
|
@ -2188,5 +2188,29 @@ class RunCoroutineThreadsafeTests(test_utils.TestCase):
|
||||||
self.assertEqual(context['exception'], exc_context.exception)
|
self.assertEqual(context['exception'], exc_context.exception)
|
||||||
|
|
||||||
|
|
||||||
|
class SleepTests(test_utils.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.loop = asyncio.new_event_loop()
|
||||||
|
asyncio.set_event_loop(None)
|
||||||
|
|
||||||
|
def test_sleep_zero(self):
|
||||||
|
result = 0
|
||||||
|
|
||||||
|
def inc_result(num):
|
||||||
|
nonlocal result
|
||||||
|
result += num
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def coro():
|
||||||
|
self.loop.call_soon(inc_result, 1)
|
||||||
|
self.assertEqual(result, 0)
|
||||||
|
num = yield from asyncio.sleep(0, loop=self.loop, result=10)
|
||||||
|
self.assertEqual(result, 1) # inc'ed by call_soon
|
||||||
|
inc_result(num) # num should be 11
|
||||||
|
|
||||||
|
self.loop.run_until_complete(coro())
|
||||||
|
self.assertEqual(result, 11)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue