diff options
| author | Christophe Simonis <chs@odoo.com> | 2017-10-10 19:14:30 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2017-10-10 19:14:30 +0200 |
| commit | 0be264b29eac11a5dec5e6565d23d4ea86bd905a (patch) | |
| tree | 79362f2340c89cb3cf2e8d8a467f357b7c7a8326 /odoo/__init__.py | |
| parent | cf753a7fdf1739dcf37d2ad74f4c8efb3d4ff3b3 (diff) | |
| parent | e1104ac344cbc349a46b22339b13dfe9cbab8bcb (diff) | |
[MERGE] forward port branch 11.0 up to e1104ac344c
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). |
