2014-09-03 60 views
0

我目前正在酸洗一个python datetime以通过芹菜传递给任务,并且遇到内存问题。我想找到一种方法来确定酸洗datetime对象的最终大小,以便我可以将其与酸洗unix时间戳进行比较。我意识到时间戳会更小,但我特别想比较两个腌渍物体的大小。确定腌制日期的大小

回答

1

一个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_PROTOCOLdump

+0

我发现'sys.getsizeof',这给了我一个不同于'print(len(etc))'的结果。 'getsizeof'给了我108个字节,而'print'给了我77. – paradox870 2014-09-03 21:14:14

+0

为了好玩,添加'size2 = len(pickle.dumps(dt,2))',pickle协议v2就小得多了。 – tdelaney 2014-09-03 21:15:04

+0

@ paradox870 - getsizeof是包含其他开销的字符串对象在内存中的大小。 len是字符串中字符数的计数。如果以ascii发送字符串,它将是len()字节长。如果你编码,比如说utf-16,那就是它的两倍。 – tdelaney 2014-09-03 21:18:41