/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

  1. #
  2. # Analogue of `multiprocessing.connection` which uses queues instead of sockets
  3. #
  4. # multiprocessing/dummy/connection.py
  5. #
  6. # Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
  7. #
  8. __all__ = [ 'Client', 'Listener', 'Pipe' ]
  9. from Queue import Queue
  10. families = [None]
  11. class Listener(object):
  12. def __init__(self, address=None, family=None, backlog=1):
  13. self._backlog_queue = Queue(backlog)
  14. def accept(self):
  15. return Connection(*self._backlog_queue.get())
  16. def close(self):
  17. self._backlog_queue = None
  18. address = property(lambda self: self._backlog_queue)
  19. def Client(address):
  20. _in, _out = Queue(), Queue()
  21. address.put((_out, _in))
  22. return Connection(_in, _out)
  23. def Pipe(duplex=True):
  24. a, b = Queue(), Queue()
  25. return Connection(a, b), Connection(b, a)
  26. class Connection(object):
  27. def __init__(self, _in, _out):
  28. self._out = _out
  29. self._in = _in
  30. self.send = self.send_bytes = _out.put
  31. self.recv = self.recv_bytes = _in.get
  32. def poll(self, timeout=0.0):
  33. if self._in.qsize() > 0:
  34. return True
  35. if timeout <= 0.0:
  36. return False
  37. self._in.not_empty.acquire()
  38. self._in.not_empty.wait(timeout)
  39. self._in.not_empty.release()
  40. return self._in.qsize() > 0
  41. def close(self):
  42. pass