2012-04-03 4 views
3

나는 장고 기반의 http 서버를 가지고 있으며 memcache에 액세스하기 위해 클라이언트 라이브러리로 django.core.cache.backends.memcached.MemcachedCache를 사용합니다. memcached에 대한 호출이 500ms 동안 캐시에 액세스 할 수없는 경우 False를 반환하도록 제한 시간 (예 : 500ms)을 설정할 수 있는지 여부를 알고 싶습니다. 우리는 DB를 호출합니다. 그렇게 할 수있는 환경이 있습니까?memcache (django)에 데이터를 가져 오는 동안 시간 초과 지정

답변

0

전에 시도한 적이 없지만 스레딩을 사용하고 캐시 할 함수 호출에 시간 초과를 설정할 수 있습니다. 예를 들어,이 링크에서 본체에서 제공되는 예를 무시하지만, 짐 캐롤의 코멘트를 보면 :

뭔가 적응 http://code.activestate.com/recipes/534115-function-timeout/

사용할 수 있습니다

from threading import Timer 
import thread, time, sys 

def timeout(): 
    thread.interrupt_main() 

try: 
    Timer(0.5, timeout).start() 
    cache.get(stuff) 
except: 
    print "Use a function to grab it from the database!" 

그렇게하지 지금 당장 테스트 해 볼 시간이 있지만, 장고 자체가 스레드인지 여부에 관심이 있으며, 그렇다면 실제로 수행 할 메인 스레드를 방해하고 있습니까? 어느 쪽이든, 그것은 잠재적 출발점입니다. 나는 이것을 허용하고 아무것도 발견 할 수없는 구성 옵션을 찾았다.

+0

실제로 스레드가 없기 때문에 장고에 문제가 있습니다. 나는 코드를보고 있었고 소켓 타임 아웃은 _SOCKET_TIMEOUT으로 파이썬 memcache 클라이언트 (memcache.py)에 지정되어있다. 기본값은 3 초입니다. 그것은 나를 위해 너무 높은 비트입니다. 아마도이 값을 수정해야 할 것입니다. 그러나 파이썬 memcache 클라이언트가이 타임 아웃을 사용자 정의 할 수있는 방법을 제공하지 않는다는 것은 정말로 이상합니다. – Rajat

+0

예, 시간 초과를 지정할 수 있습니다. 다음과 같이 socket_timeout 매개 변수를 memcache의 Client()로 전달하십시오. from memcache import Client; c = 클라이언트 ([ 'localhost'], socket_timeout = 10.5) –