嵌入式IronPython的RESTful Webservice:engine&范围问题

时间:2011-02-04 21:05:41

标签: c# web-services ironpython openrasta

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

我可以使用一些澄清的一点是:我多久需要一个新的python引擎实例和范围?每个申请一个?每次会议?每个请求?

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

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

  1. 为了使线程安全 你没有阻止任何线程 方式。
  2. 如果在一定程度上 业务层/数据层是 非常“沉重”(需要很多 实例化的时间)然后一些 可以获得绩效收益。