2014-12-10 2 views
1

Web Services Made Easy (WSME) "간단하지만 강력한 입력을 제공하여 요청 및 응답 객체를 직접 조작 할 필요가 없으므로 REST 웹 서비스 작성을 단순화합니다." WSME에서는 파이썬 클래스를 사용하여 서비스에 노출 된 리소스를 설명 할 수 있습니다. 그것을 WSME가 마샬링 그 클래스의 비 정렬 화 인스턴스에 대한 템플릿으로 클래스 객체를 사용할 수 있습니다이 방법을 수행파이썬 WSME 및 스레드 안전

class Person(wsme.types.Base): 
    lastname = wsme.type.wsattr(unicode) 
    firstname = wsme.type.wsattr(unicode) 

: WSME 당신과 같이 클래스 변수를 사용 할 것을 요구하는 것 같다. 그런 다음 WSME 데코 레이팅 된 코드에서이 클래스의 인스턴스를 사용하고 WSME는 요청 및 응답 본문을 비 정렬 화 및 정렬 (marshalling)하는 작업을 수행합니다.

그러나 WSME를 사용하여 작성된 서비스의 스레드 안전성에 대한 우려가 있습니다. 서비스가 서로 다른 "사람"리소스에 대해 두 가지 GET 요청을 어느 정도받는다면이 요청을 처리하는 스레드가 서로의 성, 성 등을 덮어 쓸 위험이 있습니다. 코드가 Person 클래스의 별도의 로컬 인스턴스를 사용하도록 올바르게 작성되었다고해도 클래스 수준에서이 속성이 정의된다는 사실은 해당 클래스의 모든 인스턴스에서 해당 속성을 공유한다는 것을 의미합니다.

나는 WSME 또는 파이썬에 대한 이해가 부족하여 걱정을하지 않을 것으로 기대하고있다. 사람들은 무엇을 생각하니? 이 문제가 정말로 중요한가요? 아니면 제가 빠진 것이 있습니까?

답변

1

WSME은 사용자가 정의한 클래스에 따라 인스턴스을 만듭니다. JSON 응답을 수신 할 때 예를 들어,이 expected datatype is called :

obj = datatype() 

이것은 새로운 인스턴스를 생성한다.

이 인스턴스는 자신의 속성이입니다. 클래스 속성은 변경되지 않으므로 Person 인스턴스 당 값은 절대로 요청간에 공유되지 않습니다.

스레드간에 공유 할 데이터가 없습니다.

기술 수준에서 wsattr() 개체는 data descriptor protocol을 구현합니다. 내장 된 property type처럼 속성을 가져 오거나 할당하거나 삭제할 때마다 인스턴스에 바인딩되므로 이러한 경우에 어떤 일이 일어나야하는지 지시 할 수 있습니다. 해당 프로세스에 대해 자세히 알고 싶다면 property 유형의 게시물을 참조하십시오. How does the @property decorator work?