2012-04-03 2 views
3

У меня есть http-сервер на основе django, и я использую django.core.cache.backends.memcached.MemcachedCache в качестве клиентской библиотеки для доступа к memcache. Я хочу знать, можем ли мы установить тайм-аут или что-то (скажем, 500 мс.), Чтобы вызов memcached возвращался False, если он не может получить доступ к кешу на 500 мс. и мы делаем вызов в БД. Есть ли такая настройка для этого?Задание таймаута при извлечении/вводе данных в 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!" 

Я не есть время проверить его прямо сейчас, но моя забота будет о том, является ли Django самой потоковой, и если да, то прерывает основной поток, что вы действительно хотите сделать? В любом случае, это потенциальная отправная точка. Я искал вариант конфигурации, который позволял бы это и ничего не нашел.

+0

У этого действительно есть проблемы с django, потому что он не заправлен. Я смотрел код, и тайм-аут сокета указан в клиенте memcache python (memcache.py) с помощью _SOCKET_TIMEOUT. По умолчанию установлено значение 3 секунды. Для меня это слишком высоко. Вероятно, мне придется изменить это значение. Но действительно странно, что клиент memcache python не предоставляет никакого способа настроить этот тайм-аут. – Rajat

+0

ДА, вы можете указать время ожидания. передайте параметр socket_timeout в Client() memcache, как в: из memcache import Client; c = Клиент (['localhost'], socket_timeout = 10.5) –

Смежные вопросы