Viewing file: connection.py (1.32 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# # Analogue of `multiprocessing.connection` which uses queues instead of sockets # # multiprocessing/dummy/connection.py # # Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt #
__all__ = [ 'Client', 'Listener', 'Pipe' ]
from Queue import Queue
families = [None]
class Listener(object):
def __init__(self, address=None, family=None, backlog=1): self._backlog_queue = Queue(backlog)
def accept(self): return Connection(*self._backlog_queue.get())
def close(self): self._backlog_queue = None
address = property(lambda self: self._backlog_queue)
def Client(address): _in, _out = Queue(), Queue() address.put((_out, _in)) return Connection(_in, _out)
def Pipe(duplex=True): a, b = Queue(), Queue() return Connection(a, b), Connection(b, a)
class Connection(object):
def __init__(self, _in, _out): self._out = _out self._in = _in self.send = self.send_bytes = _out.put self.recv = self.recv_bytes = _in.get
def poll(self, timeout=0.0): if self._in.qsize() > 0: return True if timeout <= 0.0: return False self._in.not_empty.acquire() self._in.not_empty.wait(timeout) self._in.not_empty.release() return self._in.qsize() > 0
def close(self): pass
|