Skip to content

Instantly share code, notes, and snippets.

@marklit
Created November 11, 2011 10:52
Show Gist options
  • Save marklit/1357726 to your computer and use it in GitHub Desktop.
Save marklit/1357726 to your computer and use it in GitHub Desktop.
ZeroMQ Worker example
import zmq
from multiprocessing import Process
def worker(wrk_num):
print "Getting ready to work", wrk_num
context = zmq.Context()
work_receiver = context.socket(zmq.PULL) # Channel to receive work
work_receiver.connect("tcp://127.0.0.1:5557")
results_sender = context.socket(zmq.PUSH) # Channel to send result of work
results_sender.connect("tcp://127.0.0.1:5558")
poller = zmq.Poller() # Poller to multiplex the work receiver and control receiver channels
poller.register(work_receiver, zmq.POLLIN)
while True: # Loop and accept messages from both channels, acting accordingly
socks = dict(poller.poll())
if socks.get(work_receiver) == zmq.POLLIN:
work_message = work_receiver.recv_json()
product = work_message['num'] * work_message['num']
answer_message = { 'worker' : wrk_num, 'result' : product }
print "Completed work", answer_message
results_sender.send_json(answer_message)
if __name__ == "__main__":
worker_pool = range(10)
for wrk_num in range(len(worker_pool)):
Process(target=worker, args=(wrk_num,)).start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment