Как синхронизировать потоковые сообщения с помощью Python gRPC

Как ответ на вопрос: how-do-i-handle -streaming-messages-with-python-grpc, @Nathaniel предоставляет решение для обработки запросов и ответов.

Но когда я хочу подсчитать время обработки каждого ответа, это выглядит неправильно. Например, я сплю 200 мс в моем stream_iter, но tr даже меньше 200. Мой код:

t0 = time.time()
for rsp in stub.Process(stream_iter()):
    tr = (time.time() - t0) * 1000
    print(tr)
    t0 = time.time()
...

Так что я хочу знать, как время?


person anonymous9527    schedule 19.06.2021    source источник


Ответы (1)


Трудно сказать, что не так с данным фрагментом. Я бы порекомендовал создать полный кейс воспроизведения в качестве задачи на https://github.com/grpc/grpc/issues.

Вот некоторые возможности:

  1. Управление потоком, клиент/сервер может буферизовать полученные им сообщения, поэтому в определенных сценариях вы можете увидеть небольшой всплеск.
  2. Ошибка в итераторе, например, мы хотим спать в __next__, но можем случайно внедрить сон в __iter__.

Как правило, если вы настроите масштаб и пропускную способность, шум должен исчезнуть. То, что у вас есть для измерения задержки каждого ответа, хорошо.

person Lidi Zheng    schedule 23.06.2021
comment
Да, я увеличил пропускную способность и вижу, что среднее время более достоверно, но я до сих пор не знаю, почему возникает шум. Как вы упомянули, я предполагаю, что есть буфер или другой неконтролируемый фактор. - person anonymous9527; 30.06.2021