Put an item into the cache, for this combination of args and kwargs.

        Args:
            *args: any arguments.
            **kwargs: any keyword arguments. If ``timeout`` is specified as one
                 of the keyword arguments, the item will remain available
                 for retrieval for ``timeout`` seconds. If ``timeout`` is
                 `None` or not specified, the ``default_timeout`` for this
                 cache will be used. Specify a ``timeout`` of 0 (or ensure that
                 the ``default_timeout`` for this cache is 0) if this item is
                 not to be cached.

def put(self, item, *args, **kwargs):
        """Put an item into the cache, for this combination of args and kwargs.

        Args:
            *args: any arguments.
            **kwargs: any keyword arguments. If ``timeout`` is specified as one
                 of the keyword arguments, the item will remain available
                 for retrieval for ``timeout`` seconds. If ``timeout`` is
                 `None` or not specified, the ``default_timeout`` for this
                 cache will be used. Specify a ``timeout`` of 0 (or ensure that
                 the ``default_timeout`` for this cache is 0) if this item is
                 not to be cached.
        """
        if not self.enabled:
            return
        # Check for a timeout keyword, store and remove it.
        timeout = kwargs.pop('timeout', None)
        if timeout is None:
            timeout = self.default_timeout
        cache_key = self.make_key(args, kwargs)
        # Store the item, along with the time at which it will expire
        with self._cache_lock:
            self._cache[cache_key] = (time() + timeout, item)