Python 3 и Django 2 быстрее загружать или копировать объект для просмотра? - PullRequest
0 голосов
/ 10 января 2019

Мне интересно, как наиболее эффективный способ получить большие объекты в представлениях для 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 неизмененной переменной.

Таким образом, мне приходят на ум два решения:

  1. читать в объекте при вызове вида
  2. копировать постоянный объект при вызове представления

возможно, есть еще лучшие способы справиться с этим.

Мой вопрос, вообще говоря, для больших и, возможно, сложных объектов, что является более производительным copy.deepcopy или чтение файла рассола?

...