Exemplo n.º 1
0
def test_pubsub_inheritance():

    publisher = zerorpc.Publisher()
    publisher.bind(endpoint)
    trigger = gevent.event.Event()

    class Subscriber(zerorpc.Subscriber):
        def lolita(self, a, b):
            print('lolita', a, b)
            trigger.set()

    subscriber = Subscriber()
    subscriber.connect(endpoint)
    gevent.spawn(subscriber.run)

    trigger.clear()
    # We need this retry logic to wait that the subscriber.run coroutine starts
    # reading (the published messages will go to /dev/null until then).
    for attempt in range(0, 10):
        print("====", attempt)
        publisher.lolita(1, 2)
        if trigger.wait(0.2):
            print('done')
            return

    raise RuntimeError("The subscriber didn't receive any published message")
Exemplo n.º 2
0
def main(dataset, algorithm, model, num_users, async_process, batch_size,
         num_global_iters):
    if async_process is True:
        print("async structure")
        server = zerorpc.Server(
            RpcController(dataset, algorithm, model, num_users, async_process,
                          batch_size))
        server.bind('tcp://0.0.0.0:8888')
        print('Server Start!')
        server.run()
    else:
        print("sync structure")
        server = zerorpc.Server(
            RpcController(dataset, algorithm, model, num_users, async_process,
                          batch_size))
        server.bind('tcp://0.0.0.0:8888')
        publisher = zerorpc.Publisher()
        publisher.bind('tcp://0.0.0.0:8889')
        print('Server Start!')
        trigger.clear()
        gevent.spawn(server.run)
        trigger.wait()
        publisher.ready_start(time.time())
        time.sleep(1)
        for i in range(num_global_iters):
            print("Epoch ", i)
            trigger.clear()
            publisher.new_epoch(i, time.time())
            trigger.wait()
        trigger.clear()
        publisher.complete_train(time.time())
        trigger.wait()
Exemplo n.º 3
0
def test_pubsub_composite():
    endpoint = random_ipc_endpoint()
    trigger = gevent.event.Event()

    class Subscriber(object):
        def lolita(self, a, b):
            print 'lolita', a, b
            assert a + b == 3
            trigger.set()

    publisher = zerorpc.Publisher()
    publisher.bind(endpoint)

    service = Subscriber()
    subscriber = zerorpc.Subscriber(service)
    subscriber.connect(endpoint)
    gevent.spawn(subscriber.run)

    trigger.clear()
    # We need this retry logic to wait that the subscriber.run coroutine starts
    # reading (the published messages will go to /dev/null until then).
    for attempt in xrange(0, 10):
        publisher.lolita(1, 2)
        if trigger.wait(0.2):
            print 'done'
            return

    raise RuntimeError("The subscriber didn't receive any published message")
Exemplo n.º 4
0
def test_pubsub_inheritance():
    endpoint = random_ipc_endpoint()

    publisher = zerorpc.Publisher()
    publisher.bind(endpoint)
    trigger = gevent.event.Event()

    class Subscriber(zerorpc.Subscriber):
        def lolita(self, a, b):
            print 'lolita', a, b
            assert a + b == 3
            trigger.set()

    subscriber = Subscriber()
    subscriber.connect(endpoint)
    gevent.spawn(subscriber.run)

    trigger.clear()
    publisher.lolita(1, 2)
    trigger.wait()
    print 'done'
Exemplo n.º 5
0
def test_task_context_pubsub():
    endpoint = random_ipc_endpoint()
    subscriber_ctx = zerorpc.Context()
    publisher_ctx = zerorpc.Context()

    subscriber_tracer = Tracer('[subscriber]')
    subscriber_ctx.register_middleware(subscriber_tracer)
    publisher_tracer = Tracer('[publisher]')
    publisher_ctx.register_middleware(publisher_tracer)

    trigger = gevent.event.Event()

    class Subscriber:
        def echo(self, msg):
            trigger.set()

    subscriber = zerorpc.Subscriber(Subscriber(), context=subscriber_ctx)
    subscriber.bind(endpoint)
    subscriber_task = gevent.spawn(subscriber.run)

    c = zerorpc.Publisher(context=publisher_ctx)
    c.connect(endpoint)

    trigger.clear()
    # We need this retry logic to wait that the subscriber.run coroutine starts
    # reading (the published messages will go to /dev/null until then).
    for attempt in xrange(0, 10):
        c.echo('pub...')
        if trigger.wait(0.2):
            break

    subscriber.stop()
    subscriber_task.join()

    assert publisher_tracer._log == [
        ('new', publisher_tracer.trace_id),
    ]
    assert subscriber_tracer._log == [
        ('load', publisher_tracer.trace_id),
    ]
Exemplo n.º 6
0
def test_task_context_pubsub():
    subscriber_ctx = zerorpc.Context()
    publisher_ctx = zerorpc.Context()

    subscriber_tracer = Tracer('[subscriber]')
    subscriber_ctx.register_middleware(subscriber_tracer)
    publisher_tracer = Tracer('[publisher]')
    publisher_ctx.register_middleware(publisher_tracer)

    trigger = gevent.event.Event()

    class Subscriber(object):
        def echo(self, msg):
            trigger.set()

    subscriber = zerorpc.Subscriber(Subscriber(), context=subscriber_ctx)
    subscriber.bind(endpoint)
    subscriber_task = gevent.spawn(subscriber.run)

    c = zerorpc.Publisher(context=publisher_ctx)
    c.connect(endpoint)

    trigger.clear()
    # We need this retry logic to wait that the subscriber.run coroutine starts
    # reading (the published messages will go to /dev/null until then).
    while not trigger.is_set():
        c.echo('pub...')
        if trigger.wait(TIME_FACTOR * 1):
            break

    subscriber.stop()
    subscriber_task.join()

    print(publisher_tracer._log)
    assert ('new', publisher_tracer.trace_id) in publisher_tracer._log
    print(subscriber_tracer._log)
    assert ('load', publisher_tracer.trace_id) in subscriber_tracer._log
def test_task_context_pubsub():
    endpoint = random_ipc_endpoint()
    subscriber_ctx = zerorpc.Context()
    publisher_ctx = zerorpc.Context()

    subscriber_tracer = Tracer('[subscriber]')
    subscriber_ctx.register_middleware(subscriber_tracer)
    publisher_tracer = Tracer('[publisher]')
    publisher_ctx.register_middleware(publisher_tracer)

    trigger = gevent.event.Event()

    class Subscriber:
        def echo(self, msg):
            trigger.set()

    subscriber = zerorpc.Subscriber(Subscriber(), context=subscriber_ctx)
    subscriber.bind(endpoint)
    subscriber_task = gevent.spawn(subscriber.run)

    c = zerorpc.Publisher(context=publisher_ctx)
    c.connect(endpoint)

    trigger.clear()
    c.echo('pub...')
    trigger.wait()

    subscriber.stop()
    subscriber_task.join()

    assert publisher_tracer._log == [
        ('new', publisher_tracer.trace_id),
    ]
    assert subscriber_tracer._log == [
        ('load', publisher_tracer.trace_id),
    ]
Exemplo n.º 8
0
def runserver():
    #server = zerorpc.Server(ServerRPC())
    server = zerorpc.Publisher()
    server.bind("tcp://0.0.0.0:4243")
    return server
def test_call_procedure():
    c = zerorpc.Context()

    def test(argument):
        return 'ret_real:' + argument

    assert c.middleware_call_procedure(test, 'dummy') == 'ret_real:dummy'

    def middleware_1(procedure, *args, **kwargs):
        return 'ret_middleware_1:' + procedure(*args, **kwargs)

    cnt = c.register_middleware({'call_procedure': middleware_1})
    assert cnt == 1
    assert c.middleware_call_procedure(test, 'dummy') == \
        'ret_middleware_1:ret_real:dummy'

    def middleware_2(procedure, *args, **kwargs):
        return 'ret_middleware_2:' + procedure(*args, **kwargs)

    cnt = c.register_middleware({'call_procedure': middleware_2})
    assert cnt == 1
    assert c.middleware_call_procedure(test, 'dummy') == \
        'ret_middleware_2:ret_middleware_1:ret_real:dummy'

    def mangle_arguments(procedure, *args, **kwargs):
        return procedure(args[0].upper())

    cnt = c.register_middleware({'call_procedure': mangle_arguments})
    assert cnt == 1
    assert c.middleware_call_procedure(test, 'dummy') == \
        'ret_middleware_2:ret_middleware_1:ret_real:DUMMY'

    endpoint = random_ipc_endpoint()

    # client/server
    class Server(zerorpc.Server):
        def test(self, argument):
            return 'ret_real:' + argument

    server = Server(heartbeat=1, context=c)
    server.bind(endpoint)
    gevent.spawn(server.run)
    client = zerorpc.Client(heartbeat=1, context=c)
    client.connect(endpoint)
    assert client.test('dummy') == \
        'ret_middleware_2:ret_middleware_1:ret_real:DUMMY'
    client.close()
    server.close()

    # push/pull
    trigger = gevent.event.Event()

    class Puller(zerorpc.Puller):
        argument = None

        def test(self, argument):
            self.argument = argument
            trigger.set()
            return self.argument

    puller = Puller(context=c)
    puller.bind(endpoint)
    gevent.spawn(puller.run)
    pusher = zerorpc.Pusher(context=c)
    pusher.connect(endpoint)
    trigger.clear()
    pusher.test('dummy')
    trigger.wait()
    assert puller.argument == 'DUMMY'
    #FIXME: These seems to be broken
    # pusher.close()
    # puller.close()

    # pub/sub
    trigger = gevent.event.Event()

    class Subscriber(zerorpc.Subscriber):
        argument = None

        def test(self, argument):
            self.argument = argument
            trigger.set()
            return self.argument

    subscriber = Subscriber(context=c)
    subscriber.bind(endpoint)
    gevent.spawn(subscriber.run)
    publisher = zerorpc.Publisher(context=c)
    publisher.connect(endpoint)
    trigger.clear()
    publisher.test('dummy')
    trigger.wait()
    assert subscriber.argument == 'DUMMY'