2014-09-03 2 views
0

Я в настоящее время травля python datetime, который должен быть передан заданию через сельдерей, и я сталкиваюсь с проблемами памяти. Я хотел бы найти способ определить результирующий размер травления объекта datetime, чтобы я мог сравнить его с травлением метки времени unix. Я понимаю, что временная метка будет меньше, но я специально хочу сравнить размеры обоих маринованных объектов.Определить размер маринованного Datetime

ответ

1

Марочный объект - это всего лишь массив байтов (думаю, кодированная в ASCII строка). Итак, используйте dumps, чтобы получить байты и посмотреть длину. На моей машине маринованный datetime составляет 44 байта. Это включает в себя некоторые накладные расходы, например, он будет включать в себя головку, указывающую версию протокола рассола.

import datetime 
import pickle 

dt = datetime.datetime.now() 
size = len(pickle.dumps(dt)) 
print(size, 'bytes') 

Также, если вы используете более высокий протокол, полученный маринованный объект должен быть меньше. Попробуйте protocol=pickle.HIGHEST_PROTOCOL в dump.

+0

Я нашел 'sys.getsizeof', и это дало мне другой результат, чем' print (len (и т. Д.)) '. 'getizeof' дал мне 108 байт, а' print' дал мне 77. – paradox870

+0

для развлечения, добавьте 'size2 = len (pickle.dumps (dt, 2))', pickle protocol v2 немного меньше. – tdelaney

+0

@ paradox870 - getizeof - это размер памяти в строках, который включает в себя другие служебные данные. len - это количество символов в строке. Если вы отправляете строку as ascii, она будет длиннее() байтов. Если вы кодируете, скажем, utf-16, это будет вдвое больше. – tdelaney