improved the epoll implementation lookup

This commit is contained in:
Tavis Rudd
2010-02-23 22:51:04 -05:00
parent 8e4a3be064
commit 55ee7033db

View File

@@ -1,15 +1,27 @@
from eventlet import patcher from eventlet import patcher
time = patcher.original('time') time = patcher.original('time')
try: select = patcher.original("select")
# shoot for epoll module first if hasattr(select, 'epoll'):
from epoll import poll as epoll epoll = select.epoll
except ImportError, e: else:
# if we can't import that, hope we're on 2.6
select = patcher.original('select')
try: try:
epoll = select.epoll # http://pypi.python.org/pypi/select26/
except AttributeError: from select26 import epoll
raise ImportError("No epoll on select module") except ImportError:
try:
import epoll as _epoll_mod
except ImportError:
raise ImportError(
"No epoll implementation found in select module or PYTHONPATH")
else:
if hasattr(_epoll_mod, 'poll'):
epoll = _epoll_mod.poll
else:
raise ImportError(
"You have an old, buggy epoll module in PYTHONPATH."
" Install http://pypi.python.org/pypi/python-epoll/"
" NOT http://pypi.python.org/pypi/pyepoll/. "
" easy_install pyepoll installs the wrong version.")
from eventlet.hubs.hub import BaseHub from eventlet.hubs.hub import BaseHub
from eventlet.hubs import poll from eventlet.hubs import poll
@@ -32,7 +44,7 @@ class Hub(poll.Hub):
def add(self, evtype, fileno, cb): def add(self, evtype, fileno, cb):
oldlisteners = bool(self.listeners[READ].get(fileno) or oldlisteners = bool(self.listeners[READ].get(fileno) or
self.listeners[WRITE].get(fileno)) self.listeners[WRITE].get(fileno))
listener = BaseHub.add(self,evtype, fileno, cb) listener = BaseHub.add(self, evtype, fileno, cb)
if not oldlisteners: if not oldlisteners:
# Means we've added a new listener # Means we've added a new listener
self.register(fileno, new=True) self.register(fileno, new=True)