Index: Lib/multiprocessing/dummy/connection.py |
=================================================================== |
--- Lib/multiprocessing/dummy/connection.py (revision 0) |
+++ Lib/multiprocessing/dummy/connection.py (revision 0) |
@@ -0,0 +1,61 @@ |
+# |
+# 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 |