RESTful Webservice со встроенным IronPython: вопросы о движке и области применения - PullRequest
1 голос
/ 05 февраля 2011

У меня есть веб-сервис RESTful C # (с использованием Open Rasta), для которого я хочу запускать сценарии IronPython, которые общаются с CouchDB.

Я мог бы уточнить одно: как часто мне нужноновый экземпляр движка Python и область?по одному на каждое приложение?за сеанс?за запрос?

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

Это правильно?поток безопасно?и настолько быстродействующим, насколько это возможно?

РЕДАКТИРОВАТЬ: в отношении награды Пожалуйста, также ответьте на вопрос, который я поставил в ответ Джеффу: будет ли статический экземпляр механизма заставлять последовательные запросы от разных клиентов ждать в очереди для выполнения?в таком случае мне, вероятно, потребуется все для каждого запроса.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2011

ScriptRuntime / ScriptEngine для приложения и Scope для запроса - именно то, как это должно быть сделано.Runtime / Engine являются поточно-ориентированными, а объемы - нет.

2 голосов
/ 05 февраля 2011

Для каждого запроса это путь, если весь ваш код не является поточно-ориентированным. Вы можете добиться более высокой производительности при использовании для каждого приложения (для каждого сеанса подразумевается, что у вас есть понятие «сессий» между вашим клиентом и сервером), однако подразумевается, что весь ваш код в «приложении» является поточно-ориентированным.

Таким образом, вы должны использовать каждый запрос, если только вы не знаете, что ваш код безопасен для потоков.

Обратите внимание, что для каждого приложения будет быстрее, только если:

  1. Чтобы все было безопасно Вы не блокируете темы в любом способ.
  2. В определенной степени, если бизнес-уровень / уровень данных очень "тяжелый" (много время для создания экземпляра) тогда некоторые Выигрыш в производительности может быть получен.
...