jaraco дал довольно аккуратный ответ. Мне нужно было исправить некоторые незначительные вещи, но это работает:
# Your custom class
class MyCustom(object):
def __json__(self):
return {
'a': self.a,
'b': self.b,
'__python__': 'mymodule.submodule:MyCustom.from_json',
}
to_json = __json__ # supported by simplejson
@classmethod
def from_json(cls, json):
obj = cls()
obj.a = json['a']
obj.b = json['b']
return obj
# Dumping and loading
import simplejson
obj = MyCustom()
obj.a = 3
obj.b = 4
json = simplejson.dumps(obj, for_json=True)
# Two-step loading
obj2_dict = simplejson.loads(json)
obj2 = MyCustom.from_json(obj2_dict)
# Make sure we have the correct thing
assert isinstance(obj2, MyCustom)
assert obj2.__dict__ == obj.__dict__
Обратите внимание, что нам нужно выполнить два шага для загрузки. На данный момент свойство __python__
не используется.
Используя метод AlJohri , я проверяю популярность подходов:
Сериализация (Python -> JSON):
to_json
: 266,595 на 2018-06-27 toJSON
: 96,307 по 2018-06-27 __json__
: 8 504 по 2018-06-27 for_json
: 6,937 на 2018-06-27 Дезициализация (JSON -> Python):
from_json
: 226,101 по 2018-06-27 Точные определения vsize
, rss
, rprvt
, rshrd
и других малоизвестных сокращений варьируются от ОС к ОС. Страницы справочника по командам top
и ps
будут иметь какое-то описание, но все такие описания значительно упрощены (или основаны на давно потухших реализациях ядра).
«Размер процесса», как концепция, трудно определить в общем случае. Ответы в конкретных случаях в значительной степени зависят от фактической реализации управления памятью в ОС и редко бывают настолько же удовлетворительными, как концепция аккуратного «размера процесса», существующая в умах большинства пользователей (и большинства разработчиков).
Например, ни одно из этих чисел (и, вероятно, ни одна их комбинация) не может быть использовано, чтобы точно сказать, сколько таких процессов может выполняться одновременно при заданном объеме свободной памяти. Но на самом деле, вам лучше всего прийти к этому с этой целью: зачем вам этот номер и для чего он будет использоваться? Учитывая эту информацию, я думаю, вы получите более полезные ответы.
На Солярисе можно получить подробную информацию об использовании памяти процесса с эти pmap
команда. В частности, pmap -x <pid>
шоу Вы, сколько из памяти процесса совместно используется и сколько конкретно используется тем процессом. Это полезно для разработки "крайнего" использования памяти процесса - с этой техникой, можно избежать, чтобы двойной подсчет совместно использовал библиотеки.
Да, Вы правы заблокировать в VSZ.
ps u
даст Вам VSZ и RSS, которые являются размером размера и резидентного набора виртуальной памяти. RSS - то, сколько физической памяти было выделено процессу, и VSZ является размером виртуальной памяти процесса. Если у Вас будет несколько копий выполнения программы, большая память в VSZ будет совместно использована теми процессами.