Why do you need to call notify() while still holding the condition? (See code bellow)
Almost all the sample code about Python and threading (and Condition) contains something similar to the code bellow:
from threading import Condition
condition = Condition()
condition.acquire()
#my code
condition.notify()
condition.release()
As you have the "lock" on the condition the moment you call notify() you still did not release the lock, thus any waiting thread will try to acquire the lock but not able to.