2011-02-04 2 views
1

CouchDBと通信するIronPythonスクリプトを実行するRESTful C#Webサービス(Open Rastaを使用)があります。IronPythonが組み込まれたRESTful Webサービス:エンジンと範囲の質問

私はいくつかの説明を使用することができます:どのくらいの頻度で、Pythonエンジンとスコープの新しいインスタンスが必要ですか?アプリケーションごとに1つずつセッションごとに?リクエストごとに?

私は現在、コンパイルされたスクリプトの辞書とともに、アプリケーションレベルで静的エンジンを持っています。要求ごとに新しいスコープを作成し、そのスコープ内でコードを実行します。

これは間違いありませんか?スレッドセーフ?それができるほどの演奏者として?

EDIT:賞金に関してJeffに返信した質問にも答えてください。エンジンの静的インスタンスは、異なるクライアントからの順次リクエストを実行して実行するのを待ちますか?もしそうなら、私はたぶん要求ごとにすべてを必要とします。

答えて

3

アプリケーションごとのScriptRuntime/ScriptEngineと要求ごとのスコープは、実行する必要があります。ランタイム/エンジンはスレッドセーフでスコープはありません。

+0

ありがとうございましたJeff、同時に1つのリクエストがWebサービスに同時に来ると、アプリケーションレベルで1つの静的なエンジン/ランタイムがすべてのリクエストが順次実行されるのを待ちますか? – jdoig

+0

あなたは何を知っていますか、私は実際にはわかりません。私の心配は一度もありませんでした。 –

+0

単一の静的エンジンが動作する:)これを自分でテストしたところ、LONGスレッドスリープのスクリプトを実行する要求を送信している間に、通常のスクリプトを実行する別の要求を実行して、もう1人は寝た。 – jdoig

2

リクエストは、すべてのコードがスレッドセーフでない限り、移動する方法です。アプリケーションごとにパフォーマンスを向上させることができます(セッションごとに、クライアントとサーバーの間に「sesions」という概念があることを意味します)が、「アプリケーション」内のすべてのコードはスレッドセーフです。

スレッドごとに安全であることがわかっていない限り、per-requestが必要です。

  1. 物事はあなたがどんな 方法でスレッドをブロックしていませんでした安全 スレッドにするために:また、そのアプリケーションごと

    注速い場合のみとなります。ある程度

  2. ビジネス層/データ層の場合は、その後、いくつかの パフォーマンス上の利点が得られることもある(インスタンス化に 多くの時間がかかる) 非常に「重い」です。
関連する問題