Skip to content

Instantly share code, notes, and snippets.

@scythargon
Last active August 29, 2015 14:17
Show Gist options
  • Select an option

  • Save scythargon/4e4ac5201ef1e0a6fb40 to your computer and use it in GitHub Desktop.

Select an option

Save scythargon/4e4ac5201ef1e0a6fb40 to your computer and use it in GitHub Desktop.
from queue import Queue
from threading import Thread
class GeneratedQueue(Queue):
def __init__(self, generator=None):
super(GeneratedQueue, self).__init__()
try:
self.generator = iter(generator)
except TypeError:
self.generator = generator()
def each(self):
try:
self.put(next(self.generator))
except StopIteration:
pass
while not self.empty():
yield self.get()
self.task_done()
try:
self.put(next(self.generator))
except StopIteration:
pass
def do_work(item):
print('too EZ', item)
def worker():
for item in q.each():
do_work(item)
print('stop')
def generator():
for i in range(11):
yield i
q = GeneratedQueue(generator)
num_worker_threads = 4
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
q.join()
print('finish')
q = GeneratedQueue([1,2,4])
num_worker_threads = 4
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
q.join()
print('finish')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment