Switched to using constants for the very very tiny speed boost.

This commit is contained in:
Ryan Williams
2009-08-31 20:26:56 -07:00
parent 3f798db29c
commit 8701415945
6 changed files with 35 additions and 35 deletions

View File

@@ -150,9 +150,9 @@ def trampoline(fd, read=None, write=None, timeout=None, timeout_exc=TimeoutError
t = hub.schedule_call_global(timeout, current.throw, timeout_exc) t = hub.schedule_call_global(timeout, current.throw, timeout_exc)
try: try:
if read: if read:
listener = hub.add("read", fileno, cb) listener = hub.add(hub.READ, fileno, cb)
if write: if write:
listener = hub.add("write", fileno, cb) listener = hub.add(hub.WRITE, fileno, cb)
try: try:
return hub.switch() return hub.switch()
finally: finally:
@@ -206,9 +206,9 @@ def select(read_list, write_list, error_list, timeout=None):
try: try:
for k, v in ds.iteritems(): for k, v in ds.iteritems():
if v.get('read'): if v.get('read'):
hub.add('read', k, on_read) hub.add(hub.READ, k, on_read)
if v.get('write'): if v.get('write'):
hub.add_writer('write', k, on_write) hub.add(hub.WRITE, k, on_write)
descriptors.append(k) descriptors.append(k)
try: try:
return hub.switch() return hub.switch()

View File

@@ -25,9 +25,12 @@ import time
from eventlet.support import greenlets as greenlet from eventlet.support import greenlets as greenlet
from eventlet.timer import Timer, LocalTimer from eventlet.timer import Timer, LocalTimer
READ="read"
WRITE="write"
class FdListener(object): class FdListener(object):
def __init__(self, evtype, fileno, cb): def __init__(self, evtype, fileno, cb):
assert (evtype == 'read' or evtype == 'write') assert (evtype is READ or evtype is WRITE)
self.evtype = evtype self.evtype = evtype
self.fileno = fileno self.fileno = fileno
self.cb = cb self.cb = cb
@@ -54,9 +57,12 @@ class BaseHub(object):
specific to a particular underlying event architecture. """ specific to a particular underlying event architecture. """
SYSTEM_EXCEPTIONS = (KeyboardInterrupt, SystemExit) SYSTEM_EXCEPTIONS = (KeyboardInterrupt, SystemExit)
READ = READ
WRITE = WRITE
def __init__(self, clock=time.time): def __init__(self, clock=time.time):
self.listeners = {'read':{}, 'write':{}} self.listeners = {READ:{}, WRITE:{}}
self.closed_fds = [] self.closed_fds = []
self.clock = clock self.clock = clock
@@ -78,7 +84,7 @@ class BaseHub(object):
def add(self, evtype, fileno, cb): def add(self, evtype, fileno, cb):
""" Signals an intent to or write a particular file descriptor. """ Signals an intent to or write a particular file descriptor.
The *evtype* argument is either the string 'read' or the string 'write'. The *evtype* argument is either the constant READ or WRITE.
The *fileno* argument is the file number of the file of interest. The *fileno* argument is the file number of the file of interest.
@@ -106,8 +112,8 @@ class BaseHub(object):
def remove_descriptor(self, fileno): def remove_descriptor(self, fileno):
""" Completely remove all listeners for this fileno.""" """ Completely remove all listeners for this fileno."""
self.listeners['read'].pop(fileno, None) self.listeners[READ].pop(fileno, None)
self.listeners['write'].pop(fileno, None) self.listeners[WRITE].pop(fileno, None)
def stop(self): def stop(self):
self.abort() self.abort()
@@ -304,10 +310,10 @@ class BaseHub(object):
# for debugging: # for debugging:
def get_readers(self): def get_readers(self):
return self.listeners['read'] return self.listeners[READ]
def get_writers(self): def get_writers(self):
return self.listeners['write'] return self.listeners[WRITE]
def get_timers_count(hub): def get_timers_count(hub):
return max(len(x) for x in [hub.timers, hub.next_timers]) return max(len(x) for x in [hub.timers, hub.next_timers])

View File

@@ -24,7 +24,7 @@ import traceback
import event import event
from eventlet import api from eventlet import api
from eventlet.hubs.hub import BaseHub, FdListener from eventlet.hubs.hub import BaseHub, FdListener, READ, WRITE
class event_wrapper(object): class event_wrapper(object):
@@ -129,9 +129,9 @@ class Hub(BaseHub):
running = property(_getrunning, _setrunning) running = property(_getrunning, _setrunning)
def add(self, evtype, fileno, cb): def add(self, evtype, fileno, cb):
if evtype == 'read': if evtype is READ:
evt = event.read(fileno, cb, fileno) evt = event.read(fileno, cb, fileno)
elif evtype == 'write': elif evtype is WRITE:
evt = event.write(fileno, cb, fileno) evt = event.write(fileno, cb, fileno)
listener = FdListener(evtype, fileno, evt) listener = FdListener(evtype, fileno, evt)
@@ -179,12 +179,6 @@ class Hub(BaseHub):
self.events_to_add.append(wrapper) self.events_to_add.append(wrapper)
return wrapper return wrapper
def get_readers(self):
return self.listeners['read']
def get_writers(self):
return self.listeners['write']
def _version_info(self): def _version_info(self):
baseversion = event.__version__ baseversion = event.__version__
return baseversion return baseversion

View File

@@ -26,13 +26,13 @@ import errno
from time import sleep from time import sleep
import time import time
from eventlet.hubs import hub from eventlet.hubs.hub import BaseHub, READ, WRITE
EXC_MASK = select.POLLERR | select.POLLHUP EXC_MASK = select.POLLERR | select.POLLHUP
READ_MASK = select.POLLIN READ_MASK = select.POLLIN
WRITE_MASK = select.POLLOUT WRITE_MASK = select.POLLOUT
class Hub(hub.BaseHub): class Hub(BaseHub):
def __init__(self, clock=time.time): def __init__(self, clock=time.time):
super(Hub, self).__init__(clock) super(Hub, self).__init__(clock)
self.poll = select.poll() self.poll = select.poll()
@@ -52,9 +52,9 @@ class Hub(hub.BaseHub):
def register(self, fileno): def register(self, fileno):
mask = 0 mask = 0
if self.listeners['read'].get(fileno): if self.listeners[READ].get(fileno):
mask |= READ_MASK mask |= READ_MASK
if self.listeners['write'].get(fileno): if self.listeners[WRITE].get(fileno):
mask |= WRITE_MASK mask |= WRITE_MASK
if mask: if mask:
self.poll.register(fileno, mask) self.poll.register(fileno, mask)
@@ -72,8 +72,8 @@ class Hub(hub.BaseHub):
pass pass
def wait(self, seconds=None): def wait(self, seconds=None):
readers = self.listeners['read'] readers = self.listeners[READ]
writers = self.listeners['write'] writers = self.listeners[WRITE]
if not readers and not writers: if not readers and not writers:
if seconds: if seconds:

View File

@@ -23,9 +23,9 @@ import select
import errno import errno
import time import time
from eventlet.hubs import hub from eventlet.hubs.hub import BaseHub, READ, WRITE
class Hub(hub.BaseHub): class Hub(BaseHub):
def _remove_closed_fds(self): def _remove_closed_fds(self):
""" Iterate through fds that have had their socket objects recently closed, """ Iterate through fds that have had their socket objects recently closed,
removing the ones that are actually closed per the operating system. removing the ones that are actually closed per the operating system.
@@ -38,8 +38,8 @@ class Hub(hub.BaseHub):
self.remove_descriptor(fd) self.remove_descriptor(fd)
def wait(self, seconds=None): def wait(self, seconds=None):
readers = self.listeners['read'] readers = self.listeners[READ]
writers = self.listeners['write'] writers = self.listeners[WRITE]
if not readers and not writers: if not readers and not writers:
if seconds: if seconds:
time.sleep(seconds) time.sleep(seconds)

View File

@@ -23,7 +23,7 @@ import sys
import threading import threading
from twisted.internet.base import DelayedCall as TwistedDelayedCall from twisted.internet.base import DelayedCall as TwistedDelayedCall
from eventlet import api from eventlet import api
from eventlet.hubs import hub from eventlet.hubs.hub import FdListener, READ, WRITE
class DelayedCall(TwistedDelayedCall): class DelayedCall(TwistedDelayedCall):
@@ -74,11 +74,11 @@ class socket_rwdescriptor(hub.FdListener):
disconnected = False disconnected = False
def doRead(self): def doRead(self):
if self.evtype == 'read': if self.evtype is READ:
self.cb(self) self.cb(self)
def doWrite(self): def doWrite(self):
if self.evtype == 'write': if self.evtype == WRITE:
self.cb(self) self.cb(self)
def connectionLost(self, reason): def connectionLost(self, reason):
@@ -130,9 +130,9 @@ class BaseTwistedHub(object):
def add(self, evtype, fileno, cb): def add(self, evtype, fileno, cb):
from twisted.internet import reactor from twisted.internet import reactor
descriptor = socket_rwdescriptor(evtype, fileno, cb) descriptor = socket_rwdescriptor(evtype, fileno, cb)
if evtype == 'read': if evtype is READ:
reactor.addReader(descriptor) reactor.addReader(descriptor)
if evtype == 'write': if evtype is WRITE:
reactor.addWriter(descriptor) reactor.addWriter(descriptor)
return descriptor return descriptor