2012-04-03 1 views
3

J'ai un serveur HTTP basé sur django et j'utilise django.core.cache.copy.backends.memcached.MemcachedCache comme bibliothèque client pour accéder à memcache. Je veux savoir si nous pouvons définir un timeout ou quelque chose (disons 500ms.) De sorte que l'appel à memcached renvoie False s'il n'est pas capable d'accéder au cache pendant 500ms. et nous faisons l'appel à la DB. Y a-t-il un tel paramètre pour le faire?Spécification du délai d'attente lors de la récupération/insertion de données dans memcache (django)

Répondre

0

N'avez pas essayé cela auparavant, mais vous pouvez utiliser le threading et définir un délai d'attente pour l'appel de fonction à mettre en cache. À titre d'exemple, ignorer l'exemple fourni dans le corps principal de ce lien, mais regardez le commentaire de Jim Carroll:

http://code.activestate.com/recipes/534115-function-timeout/

Adaptée pour quelque chose que vous pouvez utiliser:

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!" 

Je ne J'ai le temps de le tester maintenant, mais je me demande si Django lui-même est threadé, et si c'est le cas, interrompt le thread principal ce que vous voulez vraiment faire? De toute façon, c'est un point de départ potentiel. J'ai cherché une option de configuration qui permettrait cela et n'a rien trouvé.

+0

Il aura en effet des problèmes avec django car il n'est pas threadé. Je regardais le code et le délai de socket est spécifié dans le client python memcache (memcache.py) avec _SOCKET_TIMEOUT. La valeur par défaut est définie sur 3 secondes. C'est un peu trop élevé pour moi. Probablement je vais devoir modifier cette valeur. Mais il est vraiment étrange que le client python memcache ne fournisse aucun moyen de personnaliser ce délai. – Rajat

+0

OUI, vous pouvez spécifier le délai d'expiration. passez le paramètre socket_timeout dans Client() de memcache, comme dans: from memcache import Client; c = Client (['localhost'], socket_timeout = 10.5) –

Questions connexes