With Tornado’s gen module, you can turn Python generators into full-featured
coroutines, but coordination among these coroutines is difficult without
mutexes, semaphores, and queues.

Toro provides to Tornado coroutines a set of locking primitives and queues
analogous to those that Gevent provides to Greenlets, or that the standard
library provides to threads.

(Note that these primitives and queues are not actually thread-safe and
cannot be used in place of those from the standard library–they are meant to
coordinate Tornado coroutines in single-threaded apps, not to protect shared
objects in multithreaded apps.)
