diff options
Diffstat (limited to 'odoo/__init__.py')
| -rw-r--r-- | odoo/__init__.py | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/odoo/__init__.py b/odoo/__init__.py index 2814706b57a..c6fa6e3032a 100644 --- a/odoo/__init__.py +++ b/odoo/__init__.py @@ -18,9 +18,27 @@ evented = False if len(sys.argv) > 1 and sys.argv[1] == 'gevent': sys.argv.remove('gevent') import gevent.monkey + import psycopg2 + from gevent.socket import wait_read, wait_write gevent.monkey.patch_all() - import psycogreen.gevent - psycogreen.gevent.patch_psycopg() + + def gevent_wait_callback(conn, timeout=None): + """A wait callback useful to allow gevent to work with Psycopg.""" + # Copyright (C) 2010-2012 Daniele Varrazzo <daniele.varrazzo@gmail.com> + # This function is borrowed from psycogreen module which is licensed + # under the BSD license (see in odoo/debian/copyright) + while 1: + state = conn.poll() + if state == psycopg2.extensions.POLL_OK: + break + elif state == psycopg2.extensions.POLL_READ: + wait_read(conn.fileno(), timeout=timeout) + elif state == psycopg2.extensions.POLL_WRITE: + wait_write(conn.fileno(), timeout=timeout) + else: + raise psycopg2.OperationalError( + "Bad result from poll: %r" % state) + psycopg2.extensions.set_wait_callback(gevent_wait_callback) evented = True # Is the server running in prefork mode (e.g. behind Gunicorn). |
