diff options
| author | Jakub Stasiak <jakub@stasiak.at> | 2015-11-12 02:05:25 +0100 |
|---|---|---|
| committer | Sergey Shepelev <temotor@gmail.com> | 2015-11-24 20:30:44 +0300 |
| commit | 2c8722ae7e3489165feeb7e8daf0f8eeeecd555c (patch) | |
| tree | e630ceeaf0e7f77aaa9a464cdb844f5fe7f0bb22 /eventlet | |
| parent | 3ae710e70ecb3683f83b9829011de01b5d3e0bf4 (diff) | |
| download | eventlet-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.py | 20 | ||||
| -rw-r--r-- | eventlet/patcher.py | 8 |
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(): |
