'Release a lock, decrementing the recursion level.
If after the decrement it is zero, reset the lock to unlocked (not owned
by any thread), and if any other threads are blocked waiting for the
lock to become unlocked, allow exactly one of them to proceed. If after
the decrement the recursion level is still nonzero, the lock remains
locked and owned by the calling thread.
Only call this method when the calling thread owns the lock. A
RuntimeError is raised if this method is called when the lock is
unlocked.
There is no return value.'

def release(self):

    if (self.__owner != _get_ident()):
        raise RuntimeError('cannot    release    un-acquired    lock')
    self.__count = count = (self.__count - 1)
    if (not count):
        self.__owner = None
        self.__block.release()
        if __debug__:
            self._note('%s.release():    final    release', self)
    elif __debug__:
        self._note('%s.release():    non-final    release', self)
