multiplexer.py 746 B

1234567891011121314151617181920212223242526272829303132
  1. from threading import Thread
  2. try:
  3. from Queue import Queue, Empty
  4. except ImportError:
  5. from queue import Queue, Empty # Python 3.x
  6. class Multiplexer(object):
  7. def __init__(self, generators):
  8. self.generators = generators
  9. self.queue = Queue()
  10. def loop(self):
  11. self._init_readers()
  12. while True:
  13. try:
  14. yield self.queue.get(timeout=0.1)
  15. except Empty:
  16. pass
  17. def _init_readers(self):
  18. for generator in self.generators:
  19. t = Thread(target=_enqueue_output, args=(generator, self.queue))
  20. t.daemon = True
  21. t.start()
  22. def _enqueue_output(generator, queue):
  23. for item in generator:
  24. queue.put(item)