class_docstr: A shared, distributed Lock. Using Redis for locking allows the Lock
  to be shared across processes and/or machines.
  
  It's left to the user to resolve deadlock issues and make sure
  multiple clients play nicely together.
code: def do_extend(self, additional_time: int, replace_ttl: bool) -> bool:
      additional_time = int(additional_time * 1000)
      if not bool(
          self.lua_extend(
              keys=[self.name],
              args=[
                  self.local.token,
                  additional_time,
                  "1" if replace_ttl else "0",
              ],
              client=self.redis,
          )
      ):
          raise LockNotOwnedError(
              "Cannot extend a lock that's no longer owned"
          )
      return True
  
imports: import threading
  import time
  import uuid
  from types import SimpleNamespace, TracebackType
  from typing import Optional, Type
  from redis.exceptions import LockError, LockNotOwnedError
  from redis.typing import Number
label_desc: Use image node_id 12 for calling the Lock obj's underlying member method code with example usage: obj.do_extend(additional_time, replace_ttl) and returns: True