psycogreen -- integrating psycopg2 with coroutine libraries
The psycogreen package is a contained of callbacks to make psycopg2 work with coroutine libraries, using asynchronous calls internally but offering a blocking interface so that regular code can run unmodified.
Psycopg is a C extension module, so it cannot be monkey-patched to become coroutine-friendly. Instead it exposes a hook that coroutine libraries can use to install a function integrating with their event scheduler. Psycopg will call the function whenever it executes a libpq call that may block. psycogreen is a collection of "wait callbacks" useful to integrate Psycopg with different coroutine libraries.
If for any reason you want to avoid using Eventlet monkeypatching you can use psycogreen.eventlet.make_psycopg_green().
- Function psycogreen.eventlet.eventlet_wait_callback(conn)
- A wait callback integrating with Eventlet events loop.
- Function psycogreen.eventlet.make_psycopg_green()
- Register eventlet_wait_callback() into psycopg2
An example script showing concurrent usage of psycopg2 with urlopen() with Eventlet is available in tests/test_eventlet.py.
In order to use psycopg2 asynchronously with gevent you can use psycogreen.gevent.make_psycopg_green().
- Function psycogreen.gevent.gevent_wait_callback(conn)
- A wait callback integrating with gevent events loop.
- Function psycogreen.gevent.make_psycopg_green()
- Register gevent_wait_callback() into psycopg2
An example script showing concurrent usage of psycopg2 with urlopen() with gevent is available in tests/test_gevent.py.