switch.py: show task switching
parent.py: show greenlet ID and parentage
classes.py: use objects instead of bare functions
- but
set_other method is clumsy: how should we connect them?
scheduler.py: a queue of runnable tasks is the parent of all tasks
catch.py: show that uncaught exceptions are caught by parent greenlet
- error handling is the hardest part of concurrency
inject.py: pass values into greenlets when resuming them
- call to
.run gets the first value passed in
.switch returns a value
- exercise: use
.throw to raise an exception in a greenlet from the outside
resource.py: busy-wait competition for shared resource
wait.py: resource keeps track of who is waiting and who is ready to run
- all scheduling done by the scheduler
- if first attempt to acquire fails, acquire again when rescheduled