2012-01-15 4 views
1

현재 "ThreadSafe"가 설정된 상태에서 GAE 응용 프로그램을 Python 2.5 런타임에서 Python 2.7 런타임으로 전환하고 있습니다. 정적 메서드 및 ThreadSafe 응용 프로그램

@staticmethod 
def GetByPermaLinkId(permaLinkId): 
    result = memcache.get("entry-by-permalink-id:" + permaLinkId) 

    if result is None: 
     result = db.get(permaLinkId) 
     memcache.set("entry-by-permalink-id:" + permaLinkId, result) 

    return result 

그래서 나는 두 가지 질문이 있다고 가정

현재 내 데이터 액세스 방법은 같은 모양.

  1. 내 데이터 액세스 방법이 완전히 터무니없는가요?

  2. 내 데이터 액세스 방법은 "ThreadSafe"응용 프로그램에서 사용할 수 있습니까?

저는 App Engine과 Python 개발에 초보자입니다. 피드백은 많이 받아 들여집니다.

감사합니다.

+0

스레드 안전하지 않을 수있는 것을 쉽게 인식하는 방법은 "변경 가능한 공유 상태"를 찾는 것입니다. 즉, 코드로 수정 (true)하고 공유 (true가 아님)합니다. 정의하는 변수는 호출 된 함수에만 적용됩니다. –

+0

안녕하세요. 나는 여기 GAE에 대한 스레드 세이프 (threadafe safe) 분석을 devcon5.blogspot.com (비록 GAE/J의 경우에도) 발표했으며, 내가 다루어야 할 모든 의견이나 추가 질문을 매우 감사 할 것입니다. 감사. –

답변

1
  1. 캐싱 데이터를 자주 요청 당신의 방법은 괜찮습니다, 그러나 당신이 정말로 파이썬 스타일 가이드 PEP8 http://www.python.org/dev/peps/pep-0008/

  2. 예에서 살펴 봐야 할 좋은 생각이다. 파이썬의 쓰레드 안전성은 보통 공유 데이터에 접근하는 다중 스레드의 문제입니다. 당신은 공유 데이터를 처리하기 위해 memcache를 사용하고 있습니다. 그리고이 사용 사례의 memcache는 제가 아는 한 쓰레드 안전합니다. 대신 전역 변수에 결과를 캐시하려고 시도했으면 경쟁 조건이 있었을 것입니다.이 경우 경쟁을 피하기 위해 the.Lock을 사용할 수 있습니다.