'Return multiple values from the cache, based on the given keys.
Returns values as a list matching the keys given.
E.g.::
values = region.get_multi(["one", "two", "three"])
To convert values to a dictionary, use ``zip()``::
keys = ["one", "two", "three"]
values = region.get_multi(keys)
dictionary = dict(zip(keys, values))
Keys which aren\'t present in the list are returned as
the ``NO_VALUE`` token.  ``NO_VALUE`` evaluates to False,
but is separate from
``None`` to distinguish between a cached value of ``None``.
By default, the configured expiration time of the
:class:`.CacheRegion`, or alternatively the expiration
time supplied by the ``expiration_time`` argument,
is tested against the creation time of the retrieved
value versus the current time (as reported by ``time.time()``).
If stale, the cached value is ignored and the ``NO_VALUE``
token is returned.  Passing the flag ``ignore_expiration=True``
bypasses the expiration time check.
.. versionadded:: 0.5.0'

def get_multi(self, keys, expiration_time=None, ignore_expiration=False):

    if (not keys):
        return []
    if self.key_mangler:
        keys = list(map((lambda key: self.key_mangler(key)), keys))
    backend_values = self.backend.get_multi(keys)
    _unexpired_value_fn = self._unexpired_value_fn(expiration_time, ignore_expiration)
    return [(value.payload if (value is not NO_VALUE) else value) for value in (_unexpired_value_fn(value) for value in backend_values)]
