Skip to content

Instantly share code, notes, and snippets.

@scythargon
Last active August 29, 2015 14:17
Show Gist options
  • Save scythargon/4e4ac5201ef1e0a6fb40 to your computer and use it in GitHub Desktop.
Save scythargon/4e4ac5201ef1e0a6fb40 to your computer and use it in GitHub Desktop.

Revisions

  1. scythargon revised this gist Apr 21, 2015. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions self maintained queue
    Original 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):
    for i in range(preload + 1):
    self.load_next()

    def load_next(self):
    @@ -31,7 +31,8 @@ class GeneratedQueue(Queue):
    pass

    def each(self):
    self.load_next()
    if self.empty():
    self.load_next()

    while not self.empty():
    yield self.get()
  2. scythargon revised this gist Apr 21, 2015. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions self maintained queue
    Original file line number Diff line number Diff line change
    @@ -31,8 +31,7 @@ class GeneratedQueue(Queue):
    pass

    def each(self):
    if self.empty():
    self.load_next()
    self.load_next()

    while not self.empty():
    yield self.get()
  3. scythargon revised this gist Mar 24, 2015. 1 changed file with 25 additions and 10 deletions.
    35 changes: 25 additions & 10 deletions self maintained queue
    Original file line number Diff line number Diff line change
    @@ -1,28 +1,43 @@
    from queue import Queue
    from threading import Thread
    import threading



    class GeneratedQueue(Queue):
    def __init__(self, generator=None):
    """
    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()

    def each(self):
    for i in range(preload):
    self.load_next()

    def load_next(self):
    try:
    self.put(next(self.generator))
    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()
    try:
    self.put(next(self.generator))
    except StopIteration:
    pass
    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 = Thread(target=worker)
    t = threading.Thread(target=worker)
    t.daemon = True
    t.start()

  4. scythargon created this gist Mar 24, 2015.
    61 changes: 61 additions & 0 deletions self maintained queue
    Original 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')