kopia lustrzana https://github.com/micropython/micropython-lib
uasyncio.core: Add test for cancel(coro) function.
rodzic
17a432c1a3
commit
06a2abae56
|
@ -0,0 +1,73 @@
|
|||
import time
|
||||
try:
|
||||
import uasyncio.core as asyncio
|
||||
is_uasyncio = True
|
||||
except ImportError:
|
||||
import asyncio
|
||||
is_uasyncio = False
|
||||
import logging
|
||||
#logging.basicConfig(level=logging.DEBUG)
|
||||
#asyncio.set_debug(True)
|
||||
|
||||
|
||||
output = []
|
||||
cancelled = False
|
||||
|
||||
def print1(msg):
|
||||
print(msg)
|
||||
output.append(msg)
|
||||
|
||||
def looper1(iters):
|
||||
global cancelled
|
||||
try:
|
||||
for i in range(iters):
|
||||
print1("ping1")
|
||||
# sleep() isn't properly cancellable
|
||||
#yield from asyncio.sleep(1.0)
|
||||
t = time.time()
|
||||
while time.time() - t < 1:
|
||||
yield from asyncio.sleep(0)
|
||||
return 10
|
||||
except asyncio.CancelledError:
|
||||
print1("cancelled")
|
||||
cancelled = True
|
||||
|
||||
def looper2(iters):
|
||||
for i in range(iters):
|
||||
print1("ping2")
|
||||
# sleep() isn't properly cancellable
|
||||
#yield from asyncio.sleep(1.0)
|
||||
t = time.time()
|
||||
while time.time() - t < 1:
|
||||
yield from asyncio.sleep(0)
|
||||
return 10
|
||||
|
||||
|
||||
def run_to():
|
||||
coro = looper1(10)
|
||||
task = loop.create_task(coro)
|
||||
yield from asyncio.sleep(3)
|
||||
if is_uasyncio:
|
||||
asyncio.cancel(coro)
|
||||
else:
|
||||
task.cancel()
|
||||
# Need another eventloop iteration for cancellation to be actually
|
||||
# processed and to see side effects of the cancellation.
|
||||
yield from asyncio.sleep(0)
|
||||
assert cancelled
|
||||
|
||||
coro = looper2(10)
|
||||
task = loop.create_task(coro)
|
||||
yield from asyncio.sleep(2)
|
||||
if is_uasyncio:
|
||||
asyncio.cancel(coro)
|
||||
else:
|
||||
task.cancel()
|
||||
yield from asyncio.sleep(0)
|
||||
|
||||
# Once saw 3 ping3's output on CPython 3.5.2
|
||||
assert output == ['ping1', 'ping1', 'ping1', 'cancelled', 'ping2', 'ping2']
|
||||
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(run_to())
|
Ładowanie…
Reference in New Issue