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 range(0, 10): publisher.lolita(1, 2) if trigger.wait(0.2): print('done') return raise RuntimeError("The subscriber didn't receive any published message")
def main(dataset, model, algorithm, async_process, batch_size, learning_rate, lamda, beta, num_glob_iters, local_epochs, optimizer, data_load, index): if async_process is True: init_client(dataset, model, algorithm, async_process, batch_size, learning_rate, lamda, beta, num_glob_iters, local_epochs, optimizer, data_load, index) else: client = zerorpc.Subscriber( ClientSub(dataset, model, algorithm, async_process, batch_size, learning_rate, lamda, beta, num_glob_iters, local_epochs, optimizer, data_load, index)) client.connect('tcp://127.0.0.1:8889') client.run()
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), ]
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() publisher.lolita(1, 2) trigger.wait() print 'done'
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), ]