diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2014-03-16 10:55:32 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2014-03-16 10:55:32 (GMT) |
commit | 40021927aa1815dd54e2e7839a46e5bd1ae8c7b3 (patch) | |
tree | 04df05c6505ba3eda9aa3952a1b2ef4b4b19f3fa | |
parent | 83d0187c5742ae539cd63554555a6f285925a149 (diff) |
Keep all gevent monkey patches in one place
-rwxr-xr-x | sugar-network | 11 | ||||
-rwxr-xr-x | sugar-network-client | 11 | ||||
-rwxr-xr-x | sugar-network-node | 11 | ||||
-rw-r--r-- | sugar_network/toolkit/coroutine.py | 30 |
4 files changed, 29 insertions, 34 deletions
diff --git a/sugar-network b/sugar-network index 04caa59..c0fad69 100755 --- a/sugar-network +++ b/sugar-network @@ -25,14 +25,15 @@ import gettext from json import dumps, loads from os.path import join, exists, isfile -from gevent import monkey +from sugar_network.toolkit import coroutine +coroutine.inject() from sugar_network import db, client, toolkit from sugar_network.model import RESOURCES from sugar_network.client import IPCConnection, Connection from sugar_network.client.routes import ClientRoutes from sugar_network.toolkit.router import Router, Request, Response -from sugar_network.toolkit import application, coroutine +from sugar_network.toolkit import application from sugar_network.toolkit import Option, BUFFER_SIZE, enforce @@ -316,12 +317,6 @@ class Application(application.Application): sys.stdout.write(''.join(data)) -# Let toolkit.http work in concurrence -monkey.patch_socket() -monkey.patch_select() -monkey.patch_ssl() -monkey.patch_time() - # New defaults application.debug.value = client.logger_level() # If tmpfs is mounted to /tmp, `os.fstat()` will return 0 free space diff --git a/sugar-network-client b/sugar-network-client index 3891c99..9fffaf9 100755 --- a/sugar-network-client +++ b/sugar-network-client @@ -23,7 +23,8 @@ import gettext import logging from os.path import join, abspath, exists -from gevent import monkey +from sugar_network.toolkit import coroutine +coroutine.inject() import sugar_network_webui as webui from sugar_network import db, toolkit, client, node @@ -32,7 +33,7 @@ from sugar_network.node import stats_user from sugar_network.model import RESOURCES from sugar_network.toolkit.router import Router, Request, Response from sugar_network.toolkit import mountpoints, printf, application -from sugar_network.toolkit import Option, coroutine +from sugar_network.toolkit import Option gettext.textdomain('sugar-network') @@ -183,12 +184,6 @@ def _read_environ(pid): return dict([i.split('=', 1) for i in f.read().split('\0') if i]) -# Let toolkit.http work in concurrence -monkey.patch_socket() -monkey.patch_select() -monkey.patch_ssl() -monkey.patch_time() - locale.setlocale(locale.LC_ALL, '') # New defaults diff --git a/sugar-network-node b/sugar-network-node index f35e8ad..7743390 100755 --- a/sugar-network-node +++ b/sugar-network-node @@ -21,13 +21,14 @@ import gettext import logging from os.path import exists -from gevent import monkey +from sugar_network.toolkit import coroutine +coroutine.inject() from sugar_network import db, node, toolkit, model from sugar_network.node import obs, master, slave from sugar_network.toolkit.http import Connection from sugar_network.toolkit.router import Router -from sugar_network.toolkit import coroutine, application, Option, enforce +from sugar_network.toolkit import application, Option, enforce gettext.textdomain('sugar-network') @@ -101,12 +102,6 @@ class Application(application.Daemon): node.port.value, trust_env=False) -# Let toolkit.http work in concurrence -monkey.patch_socket() -monkey.patch_select() -monkey.patch_ssl() -monkey.patch_time() - locale.setlocale(locale.LC_ALL, '') Option.seek('main', application) diff --git a/sugar_network/toolkit/coroutine.py b/sugar_network/toolkit/coroutine.py index 1913bda..b43c1e9 100644 --- a/sugar_network/toolkit/coroutine.py +++ b/sugar_network/toolkit/coroutine.py @@ -21,12 +21,10 @@ import os import logging import gevent -import gevent.pool -import gevent.hub +from gevent import hub +from gevent.pool import Pool as _Pool from gevent.queue import Empty -from sugar_network.toolkit import enforce - #: Process one events loop round. dispatch = gevent.sleep @@ -40,13 +38,24 @@ joinall = gevent.joinall #: Access to greenlet-local storage this = None -gevent.hub.Hub.resolver_class = 'gevent.resolver_ares.Resolver' +hub.Hub.resolver_class = 'gevent.resolver_ares.Resolver' _all_jobs = None _logger = logging.getLogger('coroutine') _wsgi_logger = logging.getLogger('wsgi') +def inject(): + from gevent import monkey + + monkey.patch_os() + monkey.patch_time() + monkey.patch_socket(dns=True, aggressive=True) + monkey.patch_select(aggressive=True) + monkey.patch_ssl() + monkey.patch_subprocess() + + def spawn(*args, **kwargs): return _all_jobs.spawn(*args, **kwargs) @@ -216,7 +225,7 @@ class AsyncQueue(object): return self._queue.get_nowait() -class Pool(gevent.pool.Pool): +class Pool(_Pool): def spawn(self, *args, **kwargs): job = self.greenlet_class(*args, **kwargs) @@ -238,7 +247,7 @@ class Pool(gevent.pool.Pool): # pylint: disable-msg=W0221 def kill(self, *args, **kwargs): try: - gevent.pool.Pool.kill(self, *args, **kwargs) + _Pool.kill(self, *args, **kwargs) except Empty: # Avoid useless exception on empty poll pass @@ -322,7 +331,8 @@ class _Child(object): self._watcher = None def watch(self, cb, *args, **kwargs): - enforce(self._watcher is None, 'Watching already started') + if self._watcher is not None: + raise RuntimeError('Watching already started') loop = gevent.get_hub().loop loop.install_sigchld() self._watcher = loop.child(self.pid) @@ -344,7 +354,7 @@ class _Child(object): def _print_exception(context, klass, value, tb): - self = gevent.hub.get_hub() + self = hub.get_hub() if issubclass(klass, self.NOT_ERROR + self.SYSTEM_ERROR): return @@ -380,6 +390,6 @@ def _print_exception(context, klass, value, tb): _all_jobs = Pool() -gevent.hub.get_hub().print_exception = _print_exception +hub.get_hub().print_exception = _print_exception gevent.getcurrent().local = gevent.get_hub().local = _Local() this = _LocalAccess() |