2019-11-13 05:08:22 -05:00
|
|
|
# Test fairness of Event.set()
|
|
|
|
# That tasks which continuously wait on events don't take over the scheduler
|
|
|
|
|
|
|
|
try:
|
2023-08-22 11:15:46 -04:00
|
|
|
import asyncio
|
2019-11-13 05:08:22 -05:00
|
|
|
except ImportError:
|
2023-08-22 11:15:46 -04:00
|
|
|
print("SKIP")
|
|
|
|
raise SystemExit
|
2019-11-13 05:08:22 -05:00
|
|
|
|
|
|
|
|
2023-10-19 16:42:36 -04:00
|
|
|
# CIRCUITPY-CHANGE: CircuitPython provides __await__()
|
2023-08-20 09:02:31 -04:00
|
|
|
async def foo():
|
|
|
|
return 42
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
foo().__await__
|
|
|
|
except AttributeError:
|
|
|
|
print("SKIP")
|
|
|
|
raise SystemExit
|
|
|
|
|
|
|
|
|
2019-11-13 05:08:22 -05:00
|
|
|
async def task1(id):
|
|
|
|
for i in range(4):
|
|
|
|
print("sleep", id)
|
|
|
|
await asyncio.sleep(0)
|
|
|
|
|
|
|
|
|
|
|
|
async def task2(id, ev):
|
|
|
|
for i in range(4):
|
|
|
|
ev.set()
|
|
|
|
ev.clear()
|
|
|
|
print("wait", id)
|
|
|
|
await ev.wait()
|
|
|
|
|
|
|
|
|
|
|
|
async def main():
|
|
|
|
ev = asyncio.Event()
|
|
|
|
tasks = [
|
|
|
|
asyncio.create_task(task1(0)),
|
|
|
|
asyncio.create_task(task2(2, ev)),
|
|
|
|
asyncio.create_task(task1(1)),
|
|
|
|
asyncio.create_task(task2(3, ev)),
|
|
|
|
]
|
|
|
|
await tasks[1]
|
|
|
|
ev.set()
|
|
|
|
|
|
|
|
|
|
|
|
asyncio.run(main())
|