| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 
							- from __future__ import absolute_import
 
- from threading import Thread
 
- try:
 
-     from Queue import Queue, Empty
 
- except ImportError:
 
-     from queue import Queue, Empty  # Python 3.x
 
- # Yield STOP from an input generator to stop the
 
- # top-level loop without processing any more input.
 
- STOP = object()
 
- class Multiplexer(object):
 
-     def __init__(self, generators):
 
-         self.generators = generators
 
-         self.queue = Queue()
 
-     def loop(self):
 
-         self._init_readers()
 
-         while True:
 
-             try:
 
-                 item = self.queue.get(timeout=0.1)
 
-                 if item is STOP:
 
-                     break
 
-                 else:
 
-                     yield item
 
-             except Empty:
 
-                 pass
 
-     def _init_readers(self):
 
-         for generator in self.generators:
 
-             t = Thread(target=_enqueue_output, args=(generator, self.queue))
 
-             t.daemon = True
 
-             t.start()
 
- def _enqueue_output(generator, queue):
 
-     for item in generator:
 
-         queue.put(item)
 
 
  |