Exemplo n.º 1
0
def purerpc_codegen_greeter_port(greeter_pb2, greeter_grpc):
    class Servicer(greeter_grpc.GreeterServicer):
        async def SayHello(self, message):
            return greeter_pb2.HelloReply(message="Hello, " + message.name)

        @async_generator
        async def SayHelloGoodbye(self, message):
            await yield_(
                greeter_pb2.HelloReply(message="Hello, " + message.name))
            await yield_(
                greeter_pb2.HelloReply(message="Goodbye, " + message.name))

        async def SayHelloToManyAtOnce(self, messages):
            names = []
            async for message in messages:
                names.append(message.name)
            return greeter_pb2.HelloReply(message="Hello, " + ", ".join(names))

        @async_generator
        async def SayHelloToMany(self, messages):
            async for message in messages:
                await yield_(
                    greeter_pb2.HelloReply(message="Hello, " + message.name))

    with run_purerpc_service_in_process(Servicer().service) as port:
        yield port
Exemplo n.º 2
0
def purerpc_echo_port(echo_pb2, echo_grpc):
    class Servicer(echo_grpc.EchoServicer):
        async def Echo(self, message):
            return echo_pb2.EchoReply(data=message.data)

        @async_generator
        async def EchoTwoTimes(self, message):
            await yield_(echo_pb2.EchoReply(data=message.data))
            await yield_(echo_pb2.EchoReply(data=message.data))

        @async_generator
        async def EchoEachTime(self, messages):
            async for message in messages:
                await yield_(echo_pb2.EchoReply(data=message.data))

        async def EchoLast(self, messages):
            data = []
            async for message in messages:
                data.append(message.data)
            return echo_pb2.EchoReply(data="".join(data))

        @async_generator
        async def EchoLastV2(self, messages):
            data = []
            async for message in messages:
                data.append(message.data)
            await yield_(echo_pb2.EchoReply(data="".join(data)))

    with run_purerpc_service_in_process(Servicer().service) as port:
        yield port
Exemplo n.º 3
0
def purerpc_port(greeter_pb2, greeter_grpc):
    class Servicer(greeter_grpc.GreeterServicer):
        async def SayHello(self, message, request):
            return greeter_pb2.HelloReply(message=base64.b64encode(pickle.dumps(
                request.custom_metadata)))

    with run_purerpc_service_in_process(Servicer().service) as port:
        yield port
Exemplo n.º 4
0
def purerpc_server_wrong_method_name_port(greeter_pb2):
    service = purerpc.Service("Greeter")

    @service.rpc("SomeOtherMethod")
    async def say_hello(
            message: greeter_pb2.HelloRequest) -> greeter_pb2.HelloReply:
        return greeter_pb2.HelloReply(message="Hello, " + message.name)

    with run_purerpc_service_in_process(service) as port:
        yield port
Exemplo n.º 5
0
def purerpc_server_wrong_service_name_port(greeter_pb2):
    service = purerpc.Service("some_package.SomeWrongServiceName")

    @service.rpc("SayHello")
    async def say_hello(
            message: greeter_pb2.HelloRequest) -> greeter_pb2.HelloReply:
        return greeter_pb2.HelloReply(message="Hello, " + message.name)

    with run_purerpc_service_in_process(service) as port:
        yield port
Exemplo n.º 6
0
def purerpc_port(greeter_pb2):
    service = purerpc.Service("Greeter")

    @service.rpc("SayHello")
    async def say_hello(
            message: greeter_pb2.HelloRequest) -> greeter_pb2.HelloReply:
        status_code_tuple = pickle.loads(base64.b64decode(message.name))
        raise status_code_tuple[0](status_code_tuple[2])

    with run_purerpc_service_in_process(service) as port:
        yield port
Exemplo n.º 7
0
def purerpc_port(greeter_pb2, greeter_grpc):
    class Servicer(greeter_grpc.GreeterServicer):
        async def SayHello(self, message):
            raise ValueError("oops my bad")

        @async_generator
        async def SayHelloToMany(self, messages):
            idx = 1
            async for _ in messages:
                await yield_(greeter_pb2.HelloReply(message=str(idx)))
                if idx == 7:
                    raise ValueError("Lucky 7")
                idx += 1

    with run_purerpc_service_in_process(Servicer().service) as port:
        yield port
Exemplo n.º 8
0
def purerpc_simple_greeter_port(greeter_pb2):
    service = purerpc.Service("Greeter")

    @service.rpc("SayHello")
    async def say_hello(
            message: greeter_pb2.HelloRequest) -> greeter_pb2.HelloReply:
        return greeter_pb2.HelloReply(message="Hello, " + message.name)

    @service.rpc("SayHelloGoodbye")
    @async_generator
    async def say_hello_goodbye(
        message: greeter_pb2.HelloRequest
    ) -> purerpc.Stream[greeter_pb2.HelloReply]:
        await yield_(greeter_pb2.HelloReply(message="Hello, " + message.name))
        await yield_(greeter_pb2.HelloReply(message="Goodbye, " + message.name)
                     )

    @service.rpc("SayHelloToManyAtOnce")
    async def say_hello_to_many_at_once(
        messages: purerpc.Stream[greeter_pb2.HelloRequest]
    ) -> greeter_pb2.HelloReply:
        names = []
        async for message in messages:
            names.append(message.name)
        return greeter_pb2.HelloReply(message="Hello, " + ', '.join(names))

    @service.rpc("SayHelloToMany")
    @async_generator
    async def say_hello_to_many(
        messages: purerpc.Stream[greeter_pb2.HelloRequest]
    ) -> purerpc.Stream[greeter_pb2.HelloReply]:
        async for message in messages:
            await yield_(
                greeter_pb2.HelloReply(message="Hello, " + message.name))

    with run_purerpc_service_in_process(service) as port:
        yield port
Exemplo n.º 9
0
def dummy_server_port():
    with run_purerpc_service_in_process(purerpc.Service("Greeter")) as port:
        yield port
Exemplo n.º 10
0
if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--message_size", type=int, default=1000)
    parser.add_argument("--num_workers", type=int, default=3)
    parser.add_argument("--num_concurrent_streams", type=int, default=100)
    parser.add_argument("--num_requests_per_stream", type=int, default=50)
    parser.add_argument("--num_rounds", type=int, default=10)
    parser.add_argument("--load_type",
                        choices=["unary", "stream"],
                        required=True)

    args = parser.parse_args()

    queues = [multiprocessing.Queue() for _ in range(args.num_workers)]

    with run_purerpc_service_in_process(Greeter().service) as port:

        def target_fn(worker_id):
            queue = queues[worker_id]
            anyio.run(worker, port, queue, args.num_concurrent_streams,
                      args.num_requests_per_stream, args.num_rounds,
                      args.message_size, args.load_type)

        processes = []
        for worker_id in range(args.num_workers):
            process = multiprocessing.Process(target=target_fn,
                                              args=(worker_id, ))
            process.start()
            processes.append(process)

        for round_id in range(args.num_rounds):