C# 带嵌入式IronPython的RESTful Web服务:引擎和范围问题

C# 带嵌入式IronPython的RESTful Web服务:引擎和范围问题,c#,web-services,ironpython,openrasta,C#,Web Services,Ironpython,Openrasta,我有一个使用OpenRasta的RESTfulCweb服务,我想运行与CouchDB对话的IronPython脚本 我需要澄清的一件事是:我多久需要一个python引擎和作用域的新实例?每份申请一份?每节课?按要求 我目前在应用程序级别有一个静态引擎,还有一个编译脚本字典;然后,根据请求,我创建一个新范围并在该范围内执行代码 对吗?线程安全?尽可能地表现出来 编辑:关于赏金,请回答我在回答Jeff时提出的问题:引擎的静态实例是否会导致来自不同客户端的顺序请求排队等待执行?如果是这样的话,我可能需

我有一个使用OpenRasta的RESTfulCweb服务,我想运行与CouchDB对话的IronPython脚本

我需要澄清的一件事是:我多久需要一个python引擎和作用域的新实例?每份申请一份?每节课?按要求

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

对吗?线程安全?尽可能地表现出来


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

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

所以,除非您知道自己的代码是线程安全的,否则每个请求都是您应该使用的

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

为了保证线程安全 在任何情况下都没有阻塞线程 方法 在一定程度上,如果 业务层/数据层是 非常重,需要很多时间 是时候实例化一下了 可以获得性能效益。
除非您的所有代码都是线程安全的,否则每个请求都是可行的。使用“每个应用程序每个会话”可以获得更好的性能,这意味着您有客户机和服务器之间的session概念,但这意味着应用程序中的所有代码都是线程安全的

所以,除非您知道自己的代码是线程安全的,否则每个请求都是您应该使用的

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

为了保证线程安全 在任何情况下都没有阻塞线程 方法 在一定程度上,如果 业务层/数据层是 非常重,需要很多时间 是时候实例化一下了 可以获得性能效益。
每个应用程序有一个ScriptRuntime/ScriptEngine,每个请求有一个作用域。运行时/引擎是线程安全的,而作用域则不是。

每个应用程序的ScriptRuntime/ScriptEngine和每个请求的作用域正是应该这样做的。运行时/引擎是线程安全的,作用域不是。

谢谢Jeff,如果同时有多个请求进入web服务,并且我在应用程序级别有一个单一的、静态的引擎/运行时,所有请求都会等待顺序执行吗?你知道吗,我实际上不知道。这对我来说从来都不是一个问题,所以我从来没有测试过它的伸缩性。单一静态引擎的工作原理:我自己测试过,发现发送一个请求来执行一个长线程睡眠的脚本,同时还发出另一个请求来运行我的一个正常脚本,这允许第二个请求正常执行,而另一个请求正常执行睡眠。谢谢Jeff,如果同时有多个请求进入web服务,并且我在应用程序级别有一个单一的、静态的引擎/运行时,所有请求都会等待顺序执行吗?你知道吗,我实际上不知道。这对我来说从来都不是一个问题,所以我从来没有测试过它的伸缩性。单一静态引擎的工作原理:我自己测试过,发现发送一个请求来执行一个长线程睡眠的脚本,同时还发出另一个请求来运行我的一个正常脚本,这允许第二个请求在另一个睡眠时正常执行。