Мне интересно, как наиболее эффективный способ получить большие объекты в представлениях для Django 2
В views.py
Мне нужно загрузить большой объект в память. У меня есть как маринованный, так и файл json
. Маринованная версия является лишь незначительным улучшением при 95%
размере версии json
.
Хотя я хотел бы сделать это один раз, когда подача начнется, и затем у представления будет доступ к этой переменной уровня module
, одному из моих представлений необходимо до изменить объект делать то, что он должен делать. Поэтому, если я загружу его один раз как переменную уровня module
(здесь она называется persistent
), мы увидим, что последовательные вызовы используют обновленную переменную - как и ожидалось:
views.py
...
persistent = {'val': 0} # loaded from pickled / json file
def test(request, val):
old = persistent['val'] # required information from unmodified object
persistent['val'] = val # some computation which is required to modify the object
return JsonResponse({'old': old, 'new': val})
...
urls.py
...
urlpatterns = [
...,
path('test/<val>/', views.test, name='test')
,...
]
API звонки
localhost:8000/test/10 ---> {'old': 0, 'new': 10}
localhost:8000/test/100 ---> {'old': '10', 'new': 100}
это, конечно, ожидается. Однако для моего сценария использования мне нужен каждый вызов для доступа к исходной persistent
неизмененной переменной.
Таким образом, мне приходят на ум два решения:
- читать в объекте при вызове вида
- копировать постоянный объект при вызове представления
возможно, есть еще лучшие способы справиться с этим.
Мой вопрос, вообще говоря, для больших и, возможно, сложных объектов, что является более производительным copy.deepcopy
или чтение файла рассола?