kopia lustrzana https://github.com/peterhinch/micropython-samples
63 wiersze
949 B
Python
63 wiersze
949 B
Python
![]() |
# Shows that MicroPython seems to cancel a task earlier than CPython
|
||
|
# Also demonstrates that CPython cancels tasks when run() terminates.
|
||
|
try:
|
||
|
import asyncio
|
||
|
except ImportError:
|
||
|
import uasyncio as asyncio
|
||
|
|
||
|
async def foo(n):
|
||
|
try:
|
||
|
while True:
|
||
|
await asyncio.sleep(0)
|
||
|
print(n)
|
||
|
except asyncio.CancelledError:
|
||
|
print('Task {} canned.'.format(n))
|
||
|
raise
|
||
|
|
||
|
async def main(n):
|
||
|
tasks = []
|
||
|
for n in range(3):
|
||
|
tasks.append(asyncio.create_task(foo(n)))
|
||
|
for _ in range(n):
|
||
|
await asyncio.sleep(0)
|
||
|
print('Cancelling task 1')
|
||
|
tasks[1].cancel()
|
||
|
for _ in range(3):
|
||
|
await asyncio.sleep(0)
|
||
|
|
||
|
asyncio.run(main(n=3))
|
||
|
|
||
|
# CPython 3.8
|
||
|
#>>> import test_can
|
||
|
#0
|
||
|
#1
|
||
|
#2
|
||
|
#Cancelling task 1
|
||
|
#0
|
||
|
#Task 1 canned.
|
||
|
#2
|
||
|
#0
|
||
|
#2
|
||
|
#0
|
||
|
#2
|
||
|
#0
|
||
|
#2
|
||
|
#Task 0 canned.
|
||
|
#Task 2 canned.
|
||
|
#>>>
|
||
|
|
||
|
# MicroPython
|
||
|
#>>> import test_can
|
||
|
#0
|
||
|
#1
|
||
|
#2
|
||
|
#Cancelling task 1
|
||
|
#Task 1 canned.
|
||
|
#0
|
||
|
#2
|
||
|
#0
|
||
|
#2
|
||
|
#0
|
||
|
#2
|
||
|
#>>>
|