parameters: (self, timeout=None)
docstring: Acquire a read lock for the current thread, waiting at most
          timeout seconds or doing a non-blocking check in case timeout is <= 0.
  
          In case timeout is None, the call to acquireRead blocks until the
          lock request can be serviced.
  
          In case the timeout expires before the lock could be serviced, a
          RuntimeError is thrown.
docstring_summary: Acquire a read lock for the current thread, waiting at most
          timeout seconds or doing a non-blocking check in case timeout is <= 0.
docstring_tokens: Acquire a read lock for the current thread waiting at most timeout seconds or doing a non - blocking check in case timeout is < = 0 .
function: def acquireRead(self, timeout=None):
          """Acquire a read lock for the current thread, waiting at most
          timeout seconds or doing a non-blocking check in case timeout is <= 0.
  
          In case timeout is None, the call to acquireRead blocks until the
          lock request can be serviced.
  
          In case the timeout expires before the lock could be serviced, a
          RuntimeError is thrown."""
  
          if timeout is not None:
              endtime = time() + timeout
          me = currentThread()
          self.__condition.acquire()
          try:
              if self.__writer is me:
                  # If we are the writer, grant a new read lock, always.
                  self.__writercount += 1
                  return
              while True:
                  if self.__writer is None:
                      # Only test anything if there is no current writer.
                      if self.__upgradewritercount or self.__pendingwriters:
                          if me in self.__readers:
                              # Only grant a read lock if we already have one
                              # in case writers are waiting for their turn.
                              # This means that writers can't easily get starved
                              # (but see below, readers can).
                              self.__readers[me] += 1
                              return
                          # No, we aren't a reader (yet), wait for our turn.
                      else:
                          # Grant a new read lock, always, in case there are
                          # no pending writers (and no writer).
                          self.__readers[me] = self.__readers.get(me, 0) + 1
                          return
                  if timeout is not None:
                      remaining = endtime - time()
                      if remaining <= 0:
                          # Timeout has expired, signal caller of this.
                          raise RuntimeError("Acquiring read lock timed out")
                      self.__condition.wait(remaining)
                  else:
                      self.__condition.wait()
          finally:
              self.__condition.release()
function_tokens: def acquireRead ( self , timeout = None ) : if timeout is not None : endtime = time ( ) + timeout me = currentThread ( ) self . __condition . acquire ( ) try : if self . __writer is me : # If we are the writer, grant a new read lock, always. self . __writercount += 1 return while True : if self . __writer is None : # Only test anything if there is no current writer. if self . __upgradewritercount or self . __pendingwriters : if me in self . __readers : # Only grant a read lock if we already have one # in case writers are waiting for their turn. # This means that writers can't easily get starved # (but see below, readers can). self . __readers [ me ] += 1 return # No, we aren't a reader (yet), wait for our turn. else : # Grant a new read lock, always, in case there are # no pending writers (and no writer). self . __readers [ me ] = self . __readers . get ( me , 0 ) + 1 return if timeout is not None : remaining = endtime - time ( ) if remaining <= 0 : # Timeout has expired, signal caller of this. raise RuntimeError ( "Acquiring read lock timed out" ) self . __condition . wait ( remaining ) else : self . __condition . wait ( ) finally : self . __condition . release ( )