Skip to content

Instantly share code, notes, and snippets.

@jayrbolton
Created June 24, 2019 17:43
Show Gist options
  • Save jayrbolton/ab2b3dac73f4d456165402f0ba10768b to your computer and use it in GitHub Desktop.
Save jayrbolton/ab2b3dac73f4d456165402f0ba10768b to your computer and use it in GitHub Desktop.
Example of push pull workers with builtin thread queue vs zmq thread queue
import time
from threading import Thread
from queue import Queue
# Advantages:
# - a little simpler, uses only builtins
# - doesn't require another lib
# Disadvantages:
# - harder to migrate to other architectures (eg. request/reply, processes, fair share)
# - a little harder to add other processes (eg. monitoring)
def main():
backend_queue = Queue() # type: Queue[str]
threads = [
Thread(target=pusher, args=(backend_queue, 0), daemon=True),
Thread(target=pusher, args=(backend_queue, 1), daemon=True),
Thread(target=puller, args=(backend_queue, 2), daemon=True),
Thread(target=puller, args=(backend_queue, 3), daemon=True),
]
for t in threads:
t.start()
while True:
time.sleep(1)
def pusher(queue, id):
print(f'Pusher {id} starting..')
while True:
queue.put('sup nerds')
time.sleep(5)
def puller(queue, id):
print(f'Puller {id} starting..')
while True:
msg = queue.get()
print(f'Puller {id} received: {msg}')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment