2014-09-03 64 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