giambio/tests/cancel.py

31 lines
1.1 KiB
Python

import giambio
from debugger import Debugger
async def child(name: int):
print(f"[child {name}] Child spawned!! Sleeping for {name} seconds")
try:
await giambio.sleep(name)
except giambio.exceptions.CancelledError:
# Perform some cleanup
print(f"[child {name}] I have been cancelled!")
raise # Important! Not re-raising the exception *will* break giambio
print(f"[child {name}] Had a nice nap!")
async def main():
start = giambio.clock()
async with giambio.create_pool() as pool:
await pool.spawn(child, 1) # If you comment this line, the pool will exit immediately!
task = await pool.spawn(child, 2)
print("[main] Children spawned, awaiting completion")
await task.cancel()
print("[main] Second child cancelled")
# This code always executes, no matter what happens inside the pool (unless an exception
# is raised)
print(f"[main] Children execution complete in {giambio.clock() - start:.2f} seconds")
if __name__ == "__main__":
giambio.run(main, debugger=())