Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2014-03-16 10:55:32 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2014-03-16 10:55:32 (GMT)
commit40021927aa1815dd54e2e7839a46e5bd1ae8c7b3 (patch)
tree04df05c6505ba3eda9aa3952a1b2ef4b4b19f3fa
parent83d0187c5742ae539cd63554555a6f285925a149 (diff)
Keep all gevent monkey patches in one place
-rwxr-xr-xsugar-network11
-rwxr-xr-xsugar-network-client11
-rwxr-xr-xsugar-network-node11
-rw-r--r--sugar_network/toolkit/coroutine.py30
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()