Как обернуть _Rendezvous будущее, возвращенное grpc - PullRequest
0 голосов
/ 26 апреля 2020

Я хотел реализовать логи повторных попыток c с перехватчиками в python для клиентов grp c.

, если мы хотим реализовать это для асинхронных c вызовов grp c, это становится немного хитрее. мы знаем, что можем получить вызов asyn c grp c, подобный следующему:

future_response = stub.SayHello.future(SayHelloRequest())

, поэтому, если я хочу реализовать повторную логику c, мне нужно проверить, было ли в будущем исключение или нет:

future_response.exception()

На самом деле мы не можем этого сделать, поскольку он блокируется до тех пор, пока не придет ответ. Поэтому нам нужно использовать add_done_callback метод возвращенного будущего. так что для этого мне нужен способ обернуть возвращённое будущее вызовом grp c, но я не знаю ни одного безопасного способа сделать это. тип объекта, возвращаемого вызовом asyn c grp c, равен _Rendezvous, мне нужно обернуть этот объект другим _Rendezvous будущим, чтобы я мог вызвать set_result для этого вручную в обратном вызове основного будущего. но я не смог найти правильный способ или любую вспомогательную функцию в кодах grp c, чтобы позволить мне сделать это.

...