Как можно было бы сделать объекты Python персистентными в веб-приложении?

Если вы создаете настраиваемую политику, вы можете отправить настраиваемое событие в Azure Application Insights .

Если вы хотите отслеживать, к какому клиентскому приложению был подключен конечный пользователь, то вы должны ссылаться на параметр строки запроса client_id как входную заявку в AzureApplicationInsightsProvider [117 ] технический профиль:


  Client Identifier
  string


  

6
задан taleinat 1 December 2008 в 14:20
поделиться

6 ответов

Я думаю, что многопроцессорная платформа имеет то, что могло бы быть применимым здесь - а именно, общий ctypes модуль.

Многопроцессорная обработка довольно в новинку для Python, таким образом, это могло бы иметь некоторые причуды. Я не совсем уверен, работает ли решение с процессами, не порожденными через multiprocessing.

3
ответ дан 8 December 2019 в 13:03
поделиться

В первую очередь, Ваш подход не является общей практикой веб-разработки. Даже много поточная обработка используется, веб-приложения разработаны, чтобы смочь выполнить многопроцессорные среды, и для масштабируемости и для более легкого развертывания.

Если Вы должны просто инициализировать большой объект и не должны изменяться позже, можно сделать это легко при помощи глобальной переменной, которая инициализируется, в то время как приложение WSGI создается, или модуль содержит объект, загружается и т.д., много обработка сделает прекрасный для Вас.

Если необходимо изменить объект и получить доступ к нему от каждого потока, необходимо быть уверены, что объект ориентирован на многопотоковое исполнение, используйте блокировки для обеспечения этого. И используйте единственный контекст сервера, процесс. Любой много сервер Python поточной обработки будет служить Вам хорошо, также FCGI является хорошим выбором для этого вида дизайна.

Но, если несколько потоков получают доступ и изменяют Ваш объект, блокировки могут иметь действительно плохой эффект на Ваше увеличение производительности, которое, вероятно, заставит все преимущества уйти.

2
ответ дан 8 December 2019 в 13:03
поделиться

Другая опция состоит в том, чтобы рассмотреть требование для состояния, это походит, является ли сериализация горлышком бутылки затем, объект является очень большим. Вам действительно нужен объект, настолько большой?

Я знаю в подкасте Stackoverflow 27, reddit парни обсуждают то, что они используют для состояния, так, чтобы, возможно, полезный для слушания.

1
ответ дан 8 December 2019 в 13:03
поделиться

Будьте осторожны из преждевременной оптимизации.

Дополнение: "бэкенд Python выполняет алгоритм, состояние которого..." является сессией в веб-платформе.Именно. Позвольте платформе Django поддержать состояние сеанса в кэше. Период.

"Состояние алгоритма в расчете на пользователя претерпевает много небольших изменений, поскольку пользователь работает с приложением". Большинство веб-платформ предлагает кэшируемый объект сессии. Часто это - очень высокая производительность. См. документацию сессии Django для этого.

Совет. [Пересмотренный]

Кажется, что у Вас есть что-то, что работает. Рычаги для изучения платформы изучите инструменты и изучите, какие кнопки можно повернуть без потения. А именно, использование состояния сеанса.

Во-вторых, скрипка с кэшированием, управлением сеансами и вещами, которые легко корректироваться, и видеть, есть ли у Вас достаточно скорости. Узнайте, быстрее ли сокет MySQL или именованный канал путем испытания их. Это оптимизация без программирования.

В-третьих, измерьте уровень для нахождения фактического узкого места. Будьте готовы обеспечить (и защитить) измерения как достаточно мелкомодульные, чтобы быть полезными и достаточно стабильными к обеспечению значимого сравнения альтернатив.

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

8
ответ дан 8 December 2019 в 13:03
поделиться

Я думаю, что можно дать ZODB выстрел.

"Основной функцией ZODB является прозрачность. Вы не должны писать код для явного чтения или писать объекты в или от базы данных. Вы просто помещаете свои постоянные объекты в контейнер, который работает точно так же, как словарь Python. Все в этом словаре сохраняется в базе данных. Этот словарь, как говорят, является "корнем" базы данных. Это похоже на волшебную сумку; любой объект Python, что Вы вставляете его, становится персистентным".

Initailly это была неотъемлемая часть Zope, но в последнее время автономный пакет также доступен.

Это имеет следующее ограничение:

"На самом деле существует несколько ограничений на то, что можно сохранить в ZODB. Можно хранить любые объекты, которые могут быть "солеы" в стандартный, межплатформенный последовательный формат. Объекты как списки, словари и числа могут быть солеы. Объекты как файлы, сокеты, и объекты кода Python, не могут храниться в базе данных, потому что они не могут быть солеы".

Я считал его, но не дал ему выстрел сам все же.

Другой возможной вещью мог быть sqlite дб в оперативной памяти, который может ускорить процесс немного - быть дб в оперативной памяти, но тем не менее необходимо было бы сделать материал сериализации и так далее.Примечание: В памяти дб является дорогим на ресурсах.

Вот ссылка: http://www.zope.org/Documentation/Articles/ZODB1

2
ответ дан 8 December 2019 в 13:03
поделиться

Это Durus, система постоянных объектов для приложений, написанных на Python. язык программирования. Durus предлагает простой способ использования и постоянного коллекция экземпляров объекта, используемых одним или несколькими процессами. Доступ и изменение постоянные экземпляры управляются через кешированный экземпляр Connection, который включает commit() and abort() methods so that changes are transactional.

http://www.mems-exchange.org/software/durus/

I've used it before in some research code, where I wanted to persist the results of certain computations. I eventually switched to pytables as it met my needs better.

2
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: