N. P. O'Donnell, 2021
import trio
async def main():
print("hello")
trio.run(main)
To sleep, use trio.sleep
:
async def main():
trio.sleep(3.)
print("hello after 3s")
Nurseries are used for running multiple tasks:
import trio
async def waiter(sleep_s):
await trio.sleep(sleep_s)
print(f"done waiting {sleep_s}s")
async def main():
print("about to wait...")
async with trio.open_nursery() as n:
n.start_soon(waiter, 3)
n.start_soon(waiter, 5)
print("waiting...")
print("all done")
trio.run(main)
Timeouts can be implemented using move_on_after
:
async def main():
with trio.move_on_after(6.):
await waiter(3.)
await waiter(2.)
print("got everything done")
print("moving on")
Use fail_after
to raise an exception if a task does not complete on time:
async def main():
try:
with trio.fail_after(4.):
async with trio.open_nursery() as n:
n.start_soon(waiter, 3.)
n.start_soon(waiter, 5.)
print("didn't fail!")
except trio.TooSlowError as e:
print("failed")