def run(loop): context = Context.instance() client = context.socket(zmq.ROUTER) client.bind("tcp://*:5671") responses = yield [worker_task(idx) for idx in range(NBR_WORKERS)] + [requestor(client)] print('responses: {}'.format(responses))
def run(loop): context = Context.instance() client = context.socket(zmq.ROUTER) client.bind("tcp://*:5671") responses = yield [ worker_task(idx) for idx in range(NBR_WORKERS) ] + [requestor(client)] print('responses: {}'.format(responses))
def step1(loop, context=None): """Step 1""" context = context or Context.instance() # Signal downstream to step 2 sender = context.socket(zmq.PAIR) sender.connect("inproc://step2") msg = b'message from step1' sender.send(msg) printdbg('(step1) sent msg: {}'.format(msg))
def run(loop): context = Context.instance() client = context.socket(zmq.ROUTER) client.bind("ipc://routing.ipc") responses = yield [ worker_a(context), worker_b(context), dealer(client), ] print('responses: {}'.format(responses))
def run(loop): """ server routine """ # Prepare our context and sockets context = Context.instance() # Bind to inproc: endpoint, then start upstream thread receiver = context.socket(zmq.PAIR) receiver.bind("inproc://step3") loop.add_callback(partial(step2, loop)) # Wait for signal msg = yield receiver.recv() print("Test successful! msg: {}".format(msg))
def get(self): ctx = FutureContext.instance() s = ctx.socket(zmq.DEALER) s.connect('tcp://127.0.0.1:5555') # send request to worker yield s.send(b'hello') # finish web request with worker's reply reply = yield s.recv_string() print("\nfinishing with %r\n" % reply) self.write(reply)
async def get(self): ctx = FutureContext.instance() s = ctx.socket(zmq.DEALER) s.connect('tcp://127.0.0.1:5555') # send request to worker await s.send(b"hello") # finish web request with worker's reply reply = await s.recv_string() print("\nfinishing with %r\n" % reply) self.write(reply)
def step2(loop, context=None): """Step 2""" context = context or Context.instance() # Bind to inproc: endpoint, then start upstream thread receiver = context.socket(zmq.PAIR) receiver.bind("inproc://step2") loop.add_callback(partial(step1, loop)) # Wait for signal msg = yield receiver.recv() printdbg('(step2) received msg: {}'.format(msg)) # Signal downstream to step 3 sender = context.socket(zmq.PAIR) sender.connect("inproc://step3") msg = b'message from step2' yield sender.send(msg) printdbg('(step2) sent msg: {}'.format(msg))
def __init__(self, url: str, logger, request_timeout: int = None, database: str = None): self._logger = logger self._database = database self._context = Context.instance() self._poller = Poller() self._request = self._context.socket(zmq.DEALER) self._request_timeout = request_timeout or 60 self._rds_bus_url = url self._request.connect(self._rds_bus_url) self._request_dict = dict() self._io_loop = ioloop.IOLoop.current() self._io_loop.add_callback(self.start)
def worker_task(id, context=None): context = context or Context.instance() worker = context.socket(zmq.REQ) # We use a string identity for ease here zhelpers.set_id(worker) worker.connect("tcp://localhost:5671") total = 0 while True: # Tell the router we're ready for work yield worker.send(b"ready") # Get workload from router, until finished workload = yield worker.recv() #print('(worker {}) received: {}'.format(id, workload)) finished = workload == b"END" if finished: print("worker %d processed: %d tasks" % (id, total)) break total += 1 # Do some random work yield gen.sleep(0.1 * random.random()) raise gen.Return(('worker {}'.format(id), total))
#!/usr/bin/env python """A basic ZMQ echo server with zmq.eventloop.future""" import zmq from tornado import gen, ioloop from zmq.eventloop.future import Context @gen.coroutine def echo(sock): while True: msg = yield sock.recv_multipart() yield sock.send_multipart(msg) ctx = Context.instance() s = ctx.socket(zmq.ROUTER) s.bind('tcp://127.0.0.1:5555') loop = ioloop.IOLoop.current() loop.spawn_callback(echo, s) loop.start()