diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2009-10-26 15:49:02 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2009-10-26 15:49:02 +0000 |
| commit | c35e274e79604864e6911ce4999fa95e26f27768 (patch) | |
| tree | 84616b85b6f4de8a7a3fbd84acf589b53dcd13b5 /python/qpid/compat.py | |
| parent | 74d60c79368c1a2e70595ab33aa469e2746009c8 (diff) | |
| download | qpid-python-c35e274e79604864e6911ce4999fa95e26f27768.tar.gz | |
improved request/response performance by using an I/O based condition instead of the default condition from the python threading module
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@829837 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid/compat.py')
| -rw-r--r-- | python/qpid/compat.py | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/python/qpid/compat.py b/python/qpid/compat.py index e38f0dbe8c..c2b668a5e9 100644 --- a/python/qpid/compat.py +++ b/python/qpid/compat.py @@ -43,27 +43,47 @@ if tuple(sys.version_info[0:2]) < (2, 4): else: from select import select +class BaseWaiter: + + def wakeup(self): + self._do_write() + + def wait(self, timeout=None): + if timeout is not None: + ready, _, _ = select([self], [], [], timeout) + else: + ready = True + + if ready: + self._do_read() + return True + else: + return False + + def reading(self): + return True + + def readable(self): + self._do_read() + if sys.platform in ('win32', 'cygwin'): import socket - class SockWaiter: + class SockWaiter(BaseWaiter): def __init__(self, read_sock, write_sock): self.read_sock = read_sock self.write_sock = write_sock - def wakeup(self): + def _do_write(self): self.write_sock.send("\0") + def _do_read(self): + self.read_sock.recv(65536) + def fileno(self): return self.read_sock.fileno() - def reading(self): - return True - - def readable(self): - self.read_sock.recv(65536) - def __repr__(self): return "SockWaiter(%r, %r)" % (self.read_sock, self.write_sock) @@ -80,24 +100,21 @@ if sys.platform in ('win32', 'cygwin'): else: import os - class PipeWaiter: + class PipeWaiter(BaseWaiter): def __init__(self, read_fd, write_fd): self.read_fd = read_fd self.write_fd = write_fd - def wakeup(self): + def _do_write(self): os.write(self.write_fd, "\0") + def _do_read(self): + os.read(self.read_fd, 65536) + def fileno(self): return self.read_fd - def reading(self): - return True - - def readable(self): - os.read(self.read_fd, 65536) - def __repr__(self): return "PipeWaiter(%r, %r)" % (self.read_fd, self.write_fd) |
