Looks good! I especially like that the queue implementations are
bounded; I always feel guilty when I take the easy way out and use an
unbounded queue just because I don't have a bounded async queue
available.
A quick suggestion for the docs: I'd remove JoinableQueue from the
notify/wait table, and give it and the other queues their own section,
since their interface is more complicated than a pair of methods (and
they're also less "primitive" than the others).
I assume these are not actually thread-safe; it's probably worth
calling that out explicitly so people don't think they can use these
in place of the versions from the threading module.
If you need exclusive access to an remote resource, shouldn't that
lock be maintained externally as well? I can't think of a good
example for an asynchronous local Lock (I'm not saying there aren't
any uses for it, but they're uncommon and kind of obscure).
-Ben