Я начал использовать библиотеку буфера протокола, но заметил, что он использует огромные объемы памяти. pympler.asizeof показывает, что один из моих объектов составляет около 76k! В основном, он содержит несколько строк, некоторые числа и некоторые перечисления, а также некоторые дополнительные списки. Если бы я писал то же самое, что и C-struct, я бы ожидал, что он будет находиться в нескольких сотнях байт, и действительно, метод ByteSize возвращает 121 (размер сериализованной строки).
Вы ожидаете от библиотеки? Я слышал, что это было медленно, но это непригодно и заставляет меня больше склоняться к тому, что я злоупотребляю им.
Edit
Вот пример, который я построил. Это файл pb, похожий, но более простой, чем тот, который я использовал
package pb;
message A {
required double a = 1;
}
message B {
required double b = 1;
}
message C {
required double c = 1;
optional string s = 2;
}
message D {
required string d = 1;
optional string e = 2;
required A a = 3;
optional B b = 4;
repeated C c = 5;
}
И здесь я использую его
>>> import pb_pb2
>>> a = pb_pb2.D()
>>> a.d = "a"
>>> a.e = "e"
>>> a.a.a = 1
>>> a.b.b = 2
>>> c = a.c.add()
>>> c.c = 5
>>> c.s = "s"
>>> import pympler.asizeof
>>> pympler.asizeof.asizeof(a)
21440
>>> a.ByteSize()
42
У меня есть версия 2.2.0 protobuf (на данный момент немного старая) и python 2.6.4.