Tôi bắt đầu sử dụng thư viện bộ đệm giao thức, nhưng nhận thấy rằng nó đang sử dụng lượng bộ nhớ khổng lồ. pympler.asizeof chỉ ra rằng một đối tượng duy nhất của tôi là khoảng 76k! Về cơ bản, nó chứa một vài chuỗi, một số số, và một số enums, và một số danh sách tùy chọn giống nhau. Nếu tôi viết cùng một thứ như C-struct, tôi mong đợi nó dưới một vài trăm byte, và thực sự phương thức ByteSize trả về 121 (kích thước của chuỗi được tuần tự hóa).Bộ đệm giao thức của Google rất lớn trong python
Đó có phải là bạn mong đợi từ thư viện không? Tôi đã nghe nó rất chậm, nhưng điều này không thể sử dụng được và khiến tôi có xu hướng tin rằng tôi đang lạm dụng nó.
Sửa
Dưới đây là một ví dụ tôi xây dựng. Đây là một tập tin pb tương tự, nhưng đơn giản hơn những gì tôi đã sử dụng
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;
}
Và ở đây tôi đang sử dụng nó
>>> 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
Tôi có phiên bản 2.2.0 của protobuf (một chút cũ tại đây điểm), và trăn 2.6.4.
Một số code demo tái tạo hành vi sẽ được tốt đẹp. – phihag
@phihag Đây là một cái gì đó tương tự như tái tạo hành vi. –