2011-02-04 5 views
1

CouchDB와 통신하는 IronPython 스크립트를 실행하려는 RESTful C# 웹 서비스 (Open Rasta 사용)가 있습니다.IronPython이 포함 된 RESTful 웹 서비스 : 엔진 및 범위 질문

몇 가지 설명을 할 수있는 한 가지는 다음과 같습니다. 얼마나 자주 파이썬 엔진과 범위의 새로운 인스턴스가 필요합니까? 응용 프로그램마다 하나씩? 세션 당? 요청 당?

현재 컴파일 된 스크립트 사전과 함께 응용 프로그램 수준에서 정적 엔진이 있습니다. 그런 다음 요청에 따라 새 범위를 만들고 해당 범위 내에서 코드를 실행합니다.

맞습니까? 스레드 안전? 그리고 그것이 가능한 공연자로서?

편집 : 현상금 관련 Jeff에 대한 회신 질문에 답하십시오. 엔진의 정적 인스턴스로 인해 다른 클라이언트의 순차적 요청이 실행될 때까지 기다릴 수 있습니까? 그렇다면 모든 요청이 필요할 것입니다.

답변

3

응용 프로그램 당 ScriptRuntime/ScriptEngine과 요청 당 범위는 정확하게 수행해야하는 방법입니다. 런타임/엔진은 스레드로부터 안전하며 범위는 그렇지 않습니다.

+0

감사합니다. Jeff, 웹 서비스에 동시에 1 건의 요청이 들어오고 모든 요청이 순차적으로 실행되기를 기다리는 동안 응용 프로그램 수준에서 하나의 정적 인 엔진/런타임을 보유하고 있습니까? – jdoig

+0

너는 내가 실제로 알지 못하는 것을 안다. 결코 저에게 관심사가 아니므로 나는 그것이 어떻게 비례하는지 테스트 한 적이 없습니다. –

+0

단일 정적 엔진이 작동 함 :)이 테스트를 직접 해본 결과, LONG 스레드가있는 스크립트를 실행하라는 요청을 보내면 내 정상 스크립트 중 하나를 실행하는 다른 요청을 실행하는 동안 두 번째 요청이 정상적으로 실행될 수 있습니다. 다른 하나는 잤다. – jdoig

2

요청 당 코드는 모든 코드가 스레드로부터 안전하지 않으면 이동하는 방법입니다. 세션 당 더 나은 성능을 얻을 수 있습니다 (세션 당 클라이언트와 서버 사이에 "sesions"개념이 있음을 의미 함). 그러나 "응용 프로그램"의 모든 코드는 스레드로부터 안전하다는 암시가 있습니다.

그래서 per-request는 코드를 스레드로부터 안전하다고 판단하지 않는 한 사용해야합니다. 상황이 당신이 어떤 방법으로 스레드를 차단하지 한 안전 스레드

  1. 수 있도록하기 위해 : 빠른 경우에만

    참고 또한 응용 프로그램 당이 다를 수 있습니다. 어느 정도

  2. 비즈니스 계층/데이터 계층은 은 (인스턴스화 많은 시간을) 매우 "무거운"다음 몇 가지 성능 이점을 얻을 수 있습니다 경우.