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 /sugar_network | |
parent | 83d0187c5742ae539cd63554555a6f285925a149 (diff) |
Keep all gevent monkey patches in one place
Diffstat (limited to 'sugar_network')
-rw-r--r-- | sugar_network/toolkit/coroutine.py | 30 |
1 files changed, 20 insertions, 10 deletions
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() |