如何在Google AppEngine中获取Python对象的字节大小?

7 投票
1 回答
9491 浏览
提问于 2025-04-16 02:28

我需要计算一些Python对象的大小,这样我才能把它们分开存储到memcache里,而不超过大小限制。

在GAE环境中,似乎没有'sizeof()'这个函数可以用来获取Python对象的大小,而sys.getsizeof()也无法使用。

GAE本身显然在后台检查对象的大小,以确保不超过限制。有没有什么办法可以做到这一点呢?谢谢。

1 个回答

14

memcache 在内部总是使用 pickle 来处理数据,并把处理后的字符串存储起来。所以你可以用 len(pickle.dumps(yourobject, -1)) 来检查这个字符串的长度。需要注意的是,sys.getsizeof(这个功能需要 Python 2.6 或更高版本,所以在 GAE 上没有)其实对你没有什么帮助:

>>> import sys
>>> sys.getsizeof(23)
12
>>> import pickle
>>> len(pickle.dumps(23, -1))
5

因为一个对象经过 pickle 序列化后的大小,可能和它在内存中占用的大小差别很大,正如你所看到的。所以我想你应该感谢 GAE 不提供 sizeof,因为那样可能会让你误入歧途;-)

撰写回答