1
0

multiplexer.py 785 B

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