summaryrefslogtreecommitdiff
path: root/eventlet
diff options
context:
space:
mode:
authorJakub Stasiak <jakub@stasiak.at>2015-11-12 02:05:25 +0100
committerSergey Shepelev <temotor@gmail.com>2015-11-24 20:30:44 +0300
commit2c8722ae7e3489165feeb7e8daf0f8eeeecd555c (patch)
treee630ceeaf0e7f77aaa9a464cdb844f5fe7f0bb22 /eventlet
parent3ae710e70ecb3683f83b9829011de01b5d3e0bf4 (diff)
downloadeventlet-test.tar.gz
Fix HTTPServer.serve_forever blocking whole processtest
Original report: https://github.com/eventlet/eventlet/issues/249 Explanation is in the comments in the code.
Diffstat (limited to 'eventlet')
-rw-r--r--eventlet/green/selectors.py20
-rw-r--r--eventlet/patcher.py8
2 files changed, 27 insertions, 1 deletions
diff --git a/eventlet/green/selectors.py b/eventlet/green/selectors.py
index 26427ec..9d482fe 100644
--- a/eventlet/green/selectors.py
+++ b/eventlet/green/selectors.py
@@ -3,9 +3,29 @@ import sys
from eventlet import patcher
from eventlet.green import select
+__patched__ = [
+ 'SelectSelector',
+ 'PollSelector',
+ 'EpollSelector',
+ 'DevpollSelector',
+ 'KqueueSelector',
+]
+
patcher.inject('selectors', globals(), ('select', select))
del patcher
if sys.platform != 'win32':
SelectSelector._select = staticmethod(select.select)
+
+
+# We only have green select so the options are:
+# * leave it be and have selectors that block
+# * try to pretend the "bad" selectors don't exist
+# * replace all with SelectSelector for the price of possibly different
+# performance characteristic and missing fileno() method (if someone
+# uses it it'll result in a crash, we may want to implement it in the future)
+PollSelector = SelectSelector
+EpollSelector = SelectSelector
+DevpollSelector = SelectSelector
+KqueueSelector = SelectSelector
diff --git a/eventlet/patcher.py b/eventlet/patcher.py
index eb09f9a..40207f9 100644
--- a/eventlet/patcher.py
+++ b/eventlet/patcher.py
@@ -331,7 +331,13 @@ def _green_os_modules():
def _green_select_modules():
from eventlet.green import select
- return [('select', select)]
+ modules = [('select', select)]
+
+ if sys.version_info >= (3, 4):
+ from eventlet.green import selectors
+ modules.append(('selectors', selectors))
+
+ return modules
def _green_socket_modules():