#python #protocol-buffers
#python #буферы протокола
Вопрос:
В реализации protobuf на python Google protobuf предоставляет встроенный класс json_formatter для преобразования сообщения protobuf в тип Dict / Json, например, MessageToDict amp; MessageToJson
Встроенный метод обычно работает хорошо, но становится очень медленным, когда объем данных становится немного больше.
По ссылке, которую я упомянул выше, Google сказал: «Это простое начало для того, чтобы форматирование JSON заработало. Поскольку он основан на отражении, это не так быстро, как преобразование вызовов в сгенерированные сообщения, но это более простая реализация. (Этот код обычно не сильно оптимизирован.)’
Поэтому мне интересно, есть ли какая-либо альтернатива этому, которая могла бы каким-то образом ускорить его, или где-нибудь «более сильно оптимизированный код»? Спасибо
Редактировать: Допустимым ТИПОМ MIMETYPE для API является application/ protobuf или application/json. Хотел повысить производительность запросов, для которых указан mimetype — application / json.
Комментарии:
1. Если важна скорость, то почему вы конвертируете в JSON? Можете ли вы более подробно рассказать о том, что вы на самом деле пытаетесь сделать?
2. Спасибо! Допустимым ТИПОМ MIMETYPE для api является application/ protobuf или application/json. Хотел повысить производительность запросов, для которых указан mimetype — application / json.
3. В зависимости от того, насколько сложным является ваше сообщение, было бы не слишком сложно написать собственную функцию для преобразования его в JSON. У этого есть очевидный недостаток в том, что его сложно поддерживать. Если вашему приложению просто нужно принять JSON, то, возможно, быстрее разобрать JSON в protobuf и затем работать с ним подобным образом?
4. Само сообщение не очень сложное. Хм, хорошо, я подумаю об этом. Спасибо!
5. Медленная часть использования отражения заключается в том, что классу необходимо запрашивать себя, чтобы определить, какие поля ему нужно записать. Когда вы пишете свой собственный кодировщик, вы можете пропустить все эти запросы, поскольку вы знаете, «мне нужно написать X, Y и Z».