Вывернуть генератор Python наизнанку для конечной точки потоковой передачи GRPC - PullRequest
0 голосов
/ 09 июня 2018

У меня есть GRPC-сервер, который передает данные обратно клиенту.Генерация этих предметов, однако, также зависит от асинхронных событий и различных вещей.Поэтому я хочу разрешить другим компонентам вызывать компонент grpc и передавать данные клиенту посредством вызова.Затем данные отправляются в открытое соединение grpc.

Вот что у меня есть:

class SubmitService(ptac_grpc.SubmitServiceServicer):
    _order_gen: Generator = None

    def sendOrder(self, msg: ptac_pb2.PBOrder):
        if SubmitService._order_gen is not None:
            SubmitService._order_gen.send(msg)
        else:
            log.error("could not send order to server, no generator present")


    def getOrders(self, request, context):
        """DO NOT CALL from python. This is the API to the adapter"""
        SubmitService._order_gen = self._inside_out_gen()
        for msg in SubmitService._order_gen:
            yield msg

    def _inside_out_gen(self) -> Generator:
        while True:
            #turning a generator inside out
            yield (yield)

Моя конечная точка GRPC называется getOrders.Вызывается подключающимся клиентом.Код выше предполагает, что на данный момент есть только один клиент.Будет ли это работать?

...