"""Causes the keyedcache to also use a first-level cache in memory - this can cut 30-40% of memcached calls. To enable, add this to some models.py file in an app:: from keyedcache import threaded threaded.start_listening() """ from threaded_multihost import threadlocals from django.core.signals import request_started, request_finished from keyedcache import cache_clear_request, cache_use_request_caching import random import logging log = logging.getLogger('keyedcache.threaded') def set_request_uid(sender, *args, **kwargs): """Puts a unique id into the thread""" tid = random.randrange(1,10000000) threadlocals.set_thread_variable('request_uid', tid) #log.debug('request UID: %s', tid) def clear_request_uid(sender, *args, **kwargs): """Removes the thread cache for this request""" tid = threadlocals.get_thread_variable('request_uid', -1) if tid > -1: cache_clear_request(tid) def start_listening(): log.debug('setting up threaded keyedcache') cache_use_request_caching() request_started.connect(set_request_uid) request_finished.connect(clear_request_uid)