def lpush(self, key, *values, **kwargs):
        """
        Add string to head of list.

        This selects a factory and attempts a push there, falling back to
        others until none are left. In that case, L{NoClientError} is fired
        from the returned deferred.

        @param key: List key
        @param values: Sequence of values to push
        @param value: For backwards compatibility, a single value.
        """
        def eb(failure):
            failure.trap(RuntimeError)
            if failure.value.args == ("Not connected",):
                self._disconnected(factory)
                return self.lpush(key, *values, **kwargs)
            else:
                return failure

        if not self.factories:
            return defer.fail(NoClientError())

        factory = random.sample(self.factories, 1)[0]
        try:
            d = factory.client.lpush(key, *values, **kwargs)
        except __HOLE__:
            self._disconnected(factory)
            return self.lpush(key, *values, **kwargs)
        d.addErrback(eb)
        return d
dataset/ETHPy150Open mochi/udplog/udplog/redis.py/RedisPushMultiClient.lpush