| 66 | self.gen_thread = None |
| 67 | |
| 68 | def __iter__(self): |
| 69 | self.is_running = True |
| 70 | self.gen_thread = Thread(target=self.enqueue_values, daemon=True) |
| 71 | self.gen_thread.start() |
| 72 | |
| 73 | try: |
| 74 | while self.is_running and (self.gen_thread.is_alive() or not self.buffer.empty()): |
| 75 | try: |
| 76 | yield self.buffer.get(timeout=self.timeout) |
| 77 | except Empty: |
| 78 | pass # queue was empty this time, try again |
| 79 | finally: |
| 80 | self.stop() # ensure thread completion |
| 81 | |
| 82 | |
| 83 | def buffer_iterator(src, buffer_size: int = 1, timeout: float = 0.01, repeats: int = 1): |