Этот post сравнивает количество подпрограмм сериализации и указывает, что msgpack быстрее чем подпрограммы Python struct.pack()
и unpack (). Я хотел бы использовать msgpack, но не могу понять, как использовать msgpack.packb()
для чисел с плавающей запятой или двойников эквивалентным образом, как struct.pack()
.
Мне нужно отправить N удвоений через udp из python в C / C ++ слушатель, который читает N удваивается через udp / ip. Слушатель C / C ++ не может быть изменен. Метод Python struct.pack()
хорошо работает, как этот клип для упаковки N = 3 двойных:
import struct
import msgpack
packer = struct.Struct('ddd')
myTuple = (1.1, 2.2, 3.3)
packedData = packer.pack(*myTuple)
print (packData) дает:
b'\x9a\x99\x99\x99\x99\x99\xf1?\x9a\x99\x99\x99\x99\x99\x01@ffffff\n@'
Затем попытайтесь сделать то же самое с msgpack:
msgPackedData = msgpack.packb(myTuple)
и print (msgPackedData) дают:
b'\x93\xcb?\xf1\x99\x99\x99\x99\x99\x9a\xcb@\x01\x99\x99\x99\x99\x99\x9a\xcb@\nffffff'
Выводы явно не совпадают. Пакеты, отправленные с помощью struct.pack (), правильно интерпретируются слушателем udp, но я бы хотел получить улучшение производительности msgpack.
Можно ли повысить производительность msgpack при получении идентичного вывода, как struct.pack()
?