0
我目前正在酸洗一个python datetime
以通过芹菜传递给任务,并且遇到内存问题。我想找到一种方法来确定酸洗datetime
对象的最终大小,以便我可以将其与酸洗unix时间戳进行比较。我意识到时间戳会更小,但我特别想比较两个腌渍物体的大小。确定腌制日期的大小
我目前正在酸洗一个python datetime
以通过芹菜传递给任务,并且遇到内存问题。我想找到一种方法来确定酸洗datetime
对象的最终大小,以便我可以将其与酸洗unix时间戳进行比较。我意识到时间戳会更小,但我特别想比较两个腌渍物体的大小。确定腌制日期的大小
一个pickle对象只是一个字节数组(想想ASCII编码的字符串)。因此,请使用dumps
来获取字节并查看长度。在我的机器上,腌制的datetime
是44个字节。这包括一些开销,例如,它将包括指示pickle协议版本的头部。
import datetime
import pickle
dt = datetime.datetime.now()
size = len(pickle.dumps(dt))
print(size, 'bytes')
此外,如果您使用更高的协议,最终的腌渍对象应该更小。尝试protocol=pickle.HIGHEST_PROTOCOL
在dump
。
我发现'sys.getsizeof',这给了我一个不同于'print(len(etc))'的结果。 'getsizeof'给了我108个字节,而'print'给了我77. – paradox870 2014-09-03 21:14:14
为了好玩,添加'size2 = len(pickle.dumps(dt,2))',pickle协议v2就小得多了。 – tdelaney 2014-09-03 21:15:04
@ paradox870 - getsizeof是包含其他开销的字符串对象在内存中的大小。 len是字符串中字符数的计数。如果以ascii发送字符串,它将是len()字节长。如果你编码,比如说utf-16,那就是它的两倍。 – tdelaney 2014-09-03 21:18:41