/Lib/multiprocessing/dummy/connection.py
http://unladen-swallow.googlecode.com/ · Python · 61 lines · 35 code · 19 blank · 7 comment · 2 complexity · 5e745d77e920d275d885bff91317bb89 MD5 · raw file
- #
- # 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