Last active
August 29, 2015 14:17
-
-
Save scythargon/4e4ac5201ef1e0a6fb40 to your computer and use it in GitHub Desktop.
Revisions
-
scythargon revised this gist
Apr 21, 2015 . 1 changed file with 3 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -20,7 +20,7 @@ class GeneratedQueue(Queue): except TypeError: self.generator = generator() for i in range(preload + 1): self.load_next() def load_next(self): @@ -31,7 +31,8 @@ class GeneratedQueue(Queue): pass def each(self): if self.empty(): self.load_next() while not self.empty(): yield self.get() -
scythargon revised this gist
Apr 21, 2015 . 1 changed file with 1 addition and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -31,8 +31,7 @@ class GeneratedQueue(Queue): pass def each(self): self.load_next() while not self.empty(): yield self.get() -
scythargon revised this gist
Mar 24, 2015 . 1 changed file with 25 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,28 +1,43 @@ from queue import Queue import threading class GeneratedQueue(Queue): """ usage: for item in q.each(): do_work(item) accepts both generators and iterables """ def __init__(self, generator, preload=0): super(GeneratedQueue, self).__init__() self.lock = threading.Lock() try: self.generator = iter(generator) except TypeError: self.generator = generator() for i in range(preload): self.load_next() def load_next(self): try: with self.lock: self.put(next(self.generator)) except StopIteration: pass def each(self): if self.empty(): self.load_next() while not self.empty(): yield self.get() self.task_done() self.load_next() def do_work(item): @@ -42,7 +57,7 @@ def generator(): q = GeneratedQueue(generator) num_worker_threads = 4 for i in range(num_worker_threads): t = threading.Thread(target=worker) t.daemon = True t.start() -
scythargon created this gist
Mar 24, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,61 @@ 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')