Skip to content

Instantly share code, notes, and snippets.

@basilfx
Created March 2, 2013 12:41
Show Gist options
  • Save basilfx/5070834 to your computer and use it in GitHub Desktop.
Save basilfx/5070834 to your computer and use it in GitHub Desktop.
ZMQStream with multiprocessing.
from multiprocessing import Process
import zmq, random
from zmq.eventloop import ioloop, zmqstream
ioloop.install()
def child(port, i):
def on_message(message):
print message
def send():
stream.send("Message from %i" % i)
context = zmq.Context()
loop = ioloop.IOLoop()
socket = context.socket(zmq.PAIR)
socket.connect("tcp://127.0.0.1:%d" % port)
stream = zmqstream.ZMQStream(socket, loop)
stream.on_recv(on_message)
ioloop.PeriodicCallback(send, random.randint(750, 1500), loop).start()
loop.start()
def parent():
def on_message(message, stream):
print message
stream.send("ACK")
context = zmq.Context()
loop = ioloop.IOLoop()
for i in xrange(10):
port = random.randint(4000, 40000)
socket = context.socket(zmq.PAIR)
socket.bind("tcp://127.0.0.1:%d" % port)
stream = zmqstream.ZMQStream(socket, loop)
stream.on_recv(lambda x: on_message(x, stream))
p = Process(target=child, args=(port, i))
p.start()
loop.start()
if __name__ == "__main__":
parent()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment