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