2011-02-04 31 views
1

我有一個RESTful C#web服務(使用Open Rasta),我想運行與CouchDB交談的IronPython腳本。嵌入IronPython的RESTful Webservice:引擎和範圍問題

我可以使用一些解釋的一件事是:我多久需要一個python引擎的新實例和範圍?每個應用程序一個?每個會話?每個請求?

我目前在應用程序級別有一個靜態引擎以及編譯腳本的字典;然後,根據要求,我創建一個新的範圍並執行該範圍內的代碼...

這是正確的嗎?線程安全?並作爲性能,因爲它可能是?

編輯:關於賞金請同時回答我在答覆Jeff時提出的問題:引擎的靜態實例是否會導致來自不同客戶端的連續請求等待執行?如果是這樣的話,我可能需要每個請求的基礎上。

回答

3

每個應用程序的ScriptRuntime/ScriptEngine和每個請求的Scope都是應該如何完成的。運行時/引擎是線程安全的,範圍不是。

+0

感謝Jeff,如果同時有多個請求進入Web服務,並且我在應用程序級別有一個單一的靜態引擎/運行時,那麼所有請求都將等待依次執行? – jdoig 2011-02-05 11:58:32

2

每個請求是要走的路,除非您的所有代碼都是線程安全的。使用每個應用程序可能會獲得更好的性能(每個會話都意味着您有客戶端和服務器之間的「sesions」概念),但其含義是「應用程序」中的所有代碼都是線程安全的。

因此,每個請求是你應該使用的,除非你知道你的代碼是線程安全的。

還要注意每個應用程序會更快,僅當:

  1. 爲了使事情線程安全 你沒有阻塞線程以任何方式 。
  2. 在一定程度上,如果 業務層/數據層是 極爲「重」(需要大量的時間 實例),那麼一些 性能益處可以獲得。