From be12175c8a98acb7dd35405a2634ee681fb7ce1e Mon Sep 17 00:00:00 2001 From: "roberto@sirius" Date: Tue, 20 Apr 2010 10:19:00 +0200 Subject: [PATCH] psycopg2 async example --- tests/psycopg2_green.py | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/psycopg2_green.py diff --git a/tests/psycopg2_green.py b/tests/psycopg2_green.py new file mode 100644 index 00000000..e2e04faf --- /dev/null +++ b/tests/psycopg2_green.py @@ -0,0 +1,50 @@ +import uwsgi +import psycopg2 + +def async_wait(conn): + # conn can be a connection or a cursor + if not hasattr(conn, 'poll'): + conn = conn.connection + + # interesting part: suspend until ready + while True: + state = conn.poll() + if state == psycopg2.extensions.POLL_OK: + break + elif state == psycopg2.extensions.POLL_READ: + uwsgi.green_wait_fdread(conn.fileno()) + elif state == psycopg2.extensions.POLL_WRITE: + uwsgi.green_wait_fdwrite(conn.fileno()) + else: + raise Exception("Unexpected result from poll: %r", state) + + + + + +def application(env, start_response): + + start_response('200 Ok', [('Content-type', 'text/html')]) + + conn = psycopg2.connect("dbname=prova user=postgres", async=True) + + # suspend until connection + async_wait(conn) + + curs = conn.cursor() + + yield "" + + curs.execute("SELECT * FROM tests") + + # suspend until result + async_wait(curs) + + while True: + row = curs.fetchone() + if not row: break + yield "" % str(row) + + yield "
%s
" + + conn.close()