Я в настоящее время травля python datetime
, который должен быть передан заданию через сельдерей, и я сталкиваюсь с проблемами памяти. Я хотел бы найти способ определить результирующий размер травления объекта datetime
, чтобы я мог сравнить его с травлением метки времени unix. Я понимаю, что временная метка будет меньше, но я специально хочу сравнить размеры обоих маринованных объектов.Определить размер маринованного Datetime
0
A
ответ
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
.
Я нашел 'sys.getsizeof', и это дало мне другой результат, чем' print (len (и т. Д.)) '. 'getizeof' дал мне 108 байт, а' print' дал мне 77. – paradox870
для развлечения, добавьте 'size2 = len (pickle.dumps (dt, 2))', pickle protocol v2 немного меньше. – tdelaney
@ paradox870 - getizeof - это размер памяти в строках, который включает в себя другие служебные данные. len - это количество символов в строке. Если вы отправляете строку as ascii, она будет длиннее() байтов. Если вы кодируете, скажем, utf-16, это будет вдвое больше. – tdelaney