Created
June 24, 2019 17:43
-
-
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
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 characters
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