Locking error (?!?)
Tim Peters
tim.one at comcast.net
Fri Mar 28 13:35:34 EST 2003
[Scott Pigman]
> is this a bug in my code or my brain:
It looks like a bug in your code, but not in the code you showed us.
> ------------------------------------- class Agent:
>
> assert self.lock.locked()
>
> self.OUT_SOCKET.send(message)
> assert self.lock.locked()
>
> response = self.OUT_SOCKET.recv(Agent.MESSAGE_BUFFER_SIZE)
> assert self.lock.locked() ## FAILS
>
>
> --------------------------------------
>
> self.lock is an object of type threading.Lock, which was previously
> acquired ( lock.acquire() ). The first two assertions pass, the
> third one fails. can anybody give me some insight why?
Some other thread called lock.release().
> I had thought that once aquired, the lock will remain lock until
That part's right.
> the locking thread releases it.
But that part's not -- any thread can release the lock. It's impossible to
guess what's in the rest of your app, but it *may* be that you wanted a
threading.RLock here instead of a threading.Lock (for the relevant
difference here, read the docs -- they're really quite clear about this
distinction).
More information about the Python-list
mailing list