Сегодня я наткнулся на эту технику, но не уверен, как она работает. Я не думаю, что это действительно важно для этого примера, но я использую Django для приложения.Память в Python, сохраняющаяся между запросами
def post_to_endpoint(request, key=None):
if not hasattar(post_to_endpoint, '__my_memo__'):
post_to_endpoint.__my_memo__ = {
"key1": "url" + "path",
"key2": "url2" + "path",
"key3": "url3" + "path",
"key4": "url4" + "path",
}
if key:
url = post_to_endpoint.__my_memo__.get(key, None)
if url:
# make my request here
# return the response
Я понимаю, что в этом надуманном примере это, вероятно, микро-оптимизация. В моих функциях я бы просто воссоздал это dict
при каждом вызове. На базовом уровне я понимаю, что этот dict
спрятан во что-то под названием func_dict
, но я действительно не понимаю, как он живет между запросами.
Мое понимание с PHP-фона заключается в том, что вся инфраструктура инициализируется для каждого запроса, но, возможно, это не так с Python/Django/WSGI? Я также очень слаб, понимая, как все это выполняется с процессами/потоками, может быть, эта информация хранится? Я бы ожидал, что что-то вроде этого нужно будет сделать в каком-то сохраненном кеше, но, очевидно, это не так.
Кроме того, плакат в других местах, упомянутых в меморандуме, также может быть достигнут с помощью словаря, но я также не понимаю, как это будет происходить между запросами.
You» я сам ответил на вопрос. Приложение WSGI работает в отдельном процессе (или многих процессах), который сохраняется для многих запросов. –
У вас есть некоторые варианты здесь, используйте ddbb как redis для обмена информацией или даже mmap (не совсем уверен в этом, но я думаю, что он может работать) – Netwave
Используйте систему кеширования, такую как memcached или Redis –