1

我有一个 RESTful C# Web 服务(使用 Open Rasta),我想运行与 CouchDB 对话的 IronPython 脚本。

我可以澄清的一件事是:我多久需要一次 python 引擎和范围的新实例?每个应用程序一个?每个会话?每个请求?

我目前在应用程序级别有一个静态引擎以及一个已编译脚本的字典;然后,根据请求,我创建一个新范围并在该范围内执行代码......

那是对的吗?线程安全吗?并尽可能高效?

编辑:关于赏金还请回答我在回复 Jeff 时提出的问题:引擎的静态实例是否会导致来自不同客户端的顺序请求排队等待执行?如果是这样,我可能会根据每个请求需要一切。

4

2 回答 2

3

每个应用程序的 ScriptRuntime/ScriptEngine 和每个请求的 Scope 正是应该如何完成的。运行时/引擎是线程安全的,而作用域不是。

于 2011-02-04T23:04:20.417 回答
2

除非您的所有代码都是线程安全的,否则按请求是要走的路。您可以使用每个应用程序获得更好的性能(每个会话意味着您在客户端和服务器之间具有“会话”的概念),但是这意味着您在“应用程序”中的所有代码都是线程安全的。

因此,除非您知道您的代码是线程安全的,否则您应该使用每个请求。

另请注意,只有在以下情况下,每个应用程序才会更快:

  1. 为了使事情线程安全,您没有以任何方式阻塞线程。
  2. 在某种程度上,如果业务层/数据层非常“繁重”(需要大量时间来实例化),那么可能会获得一些性能优势。
于 2011-02-04T22:37:59.157 回答