docs: def lock_holders(path,
                   zk_hosts=None,
                   identifier=None,
                   max_concurrency=1,
                   timeout=None,
                   ephemeral_lease=False,
                   profile=None,
                   scheme=None,
                   username=None,
                   password=None,
                   default_acl=None):
      '''
      Return an un-ordered list of lock holders
  
      path
          The path in zookeeper where the lock is
  
      zk_hosts
          zookeeper connect string
  
      identifier
          Name to identify this minion, if unspecified defaults to hostname
  
      max_concurrency
          Maximum number of lock holders
  
      timeout
          timeout to wait for the lock. A None timeout will block forever
  
      ephemeral_lease
          Whether the locks in zookeper should be ephemeral
  
      Example:
  
      .. code-block: bash
  
          salt minion zk_concurrency.lock_holders /lock/path host1:1234,host2:1234
      '''
      zk = _get_zk_conn(profile=profile, hosts=zk_hosts, scheme=scheme,
                        username=username, password=password, default_acl=default_acl)
      if path not in __context__['semaphore_map']:
          __context__['semaphore_map'][path] = _Semaphore(zk, path, identifier,
                                                          max_leases=max_concurrency,
                                                          ephemeral_lease=ephemeral_lease)
      return __context__['semaphore_map'][path].lease_holders()