title: What is Lock in Python _thread module?
body: <p>I read "Core Python Applications Programming", in which this code is written.</p>
  
  <pre class="lang-py prettyprint-override"><code>import _thread
  from time import sleep, ctime
  
  loops = [4, 2]
  
  def loop(nloop, nsec, lock):
    print("start loop", nloop, "at:", ctime())
    sleep(nsec)
    print("loop", nloop, "done at:", ctime())
    lock.release()
  
  def main():
    print("starting at:", ctime())
    locks = []
    nloops = range(len(loops))
  
    for i in nloops:
      lock = _thread.allocate_lock()
      a = lock.acquire()
      locks.append(lock)
  
    for i in nloops:
      _thread.start_new_thread(loop, (i, loops[i], locks[i]))
  
    for i in nloops:
      while locks[i].locked(): pass
  
    print("all DONE at:", ctime())
  
  if __name__ == "__main__":
    main()
  </code></pre>
  
  <p>In official reference, I saw "only one thread at a time can acquire a lock".
  Lock is to ensure that only one thread is executed at a time, isn't it ?
  Now I have two questions.</p>
  
  <ol>
  <li>Why can more than one locks be produced ?</li>
  <li>Why can two thread acquire each lock at the same time ?</li>
  </ol>