Extracted Async Manager from Ginkgo as standalone project. At the very least it provides a common interface / abstraction for Gevent and Eventlet, but also for multi-threading and multi-processing.
# easy async global singleton object
from ginkgo.async import async
# initialization
async.init('gevent', patch=['socket'])
# spawn a new (green) thread
async.spawn(myfunc)
# schedule (green) thread to be spawned
async.spawn_later(5, myfunc)
# sleep and yield
async.sleep(1.0)
# semantic convenience for async.sleep(0)
async.yield()
# factory for common event primitive
event = async.event()
# factory for common basic lock primitive
lock = async.lock()
# factory for basic queue
queue = async.queue()
# signal handling
async.signal('SIGALRM', handler)
# close down (green) threads
async.shutdown()
# wrap function call with async.spawn
@async.autospawn
def some_async_func():
pass
Manages all created threads in a group.
Could provide multiple async managers to provide ability to run multiple types of async engines at once. Could provide standard server/client classes/wrappers like Ginkgo considered.