Пример #1
0
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))
Пример #2
0
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))
Пример #3
0
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))
Пример #4
0
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))
Пример #5
0
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))
Пример #6
0
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))
Пример #7
0
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))
Пример #8
0
    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)
Пример #9
0
    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)
Пример #10
0
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))
Пример #11
0
 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)
Пример #12
0
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))
Пример #13
0
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))
Пример #14
0
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))
Пример #15
0
#!/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()