def METHOD_NAME(self, to_wait_for, timeout=1):
    try:
        self.lock.acquireRead(timeout=timeout)
        assert not self.writer_active
        print("thread (reader): %s starting" % current_thread().name)
        self.readers += 1
        while to_wait_for - self.readers > 0:
            assert not self.writer_active
            print("waiting for %d more readers" % (to_wait_for - self.readers))
            sleep(0.1)
    except Exception as ex:
        self.exceptions[current_thread().name] = ex
    finally:
        try:
            self.lock.release()
        except ValueError:  # ignore double release error
            pass
    print("thread (reader): %s exiting" % current_thread().name)