Aquire the lock. Returns True if the lock was acquired; False otherwise.

        timeout (int): Timeout to wait for the lock to change if it is already acquired.
            Defaults to what was provided during initialization, which will block and retry until acquired.

def acquire(self, **kwargs):
        """
        Aquire the lock. Returns True if the lock was acquired; False otherwise.

        timeout (int): Timeout to wait for the lock to change if it is already acquired.
            Defaults to what was provided during initialization, which will block and retry until acquired. 
        """
        token = str(uuid.uuid4())
        attempted = False
        while self.token is None:
            try:
                self.client.test_and_set(self.key, token, "0", ttl=self.ttl)
                self.token = token
            except etcd.EtcdKeyNotFound, e:
                try:
                    self.client.write(self.key, token, prevExist=False, recursive=True, ttl=self.ttl)
                    self.token = token
                except etcd.EtcdAlreadyExist, e:
                    pass  # someone created the right before us
            except ValueError, e:
                # someone else has the lock
                if 'timeout' in kwargs or self.timeout is not None:
                    if attempted is True: return False
                    kwargs.setdefault("timeout", self.timeout)
                    try:
                        self.client.read(self.key, wait=True, timeout=kwargs["timeout"])
                        attempted = True
                    except etcd.EtcdException, e:
                        return False
                else:
                    self.client.watch(self.key)

        if self.renewSecondsPrior is not None:
            timer_ttl = self.ttl - self.renewSecondsPrior

            if timer_ttl > 0:
                def renew():
                    if self.renew():
                        Timer(timer_ttl, renew).start()

                Timer(timer_ttl, renew).start()
        else:
            def cleanup():
                if self.token is token:
                    self.token = None

            Timer(self.ttl, cleanup).start()

        return True