python 使用 condition 来来同步资源。condition 在文档中描述的是使用 RLock,可重复进入的锁。
今天遇到一个奇怪的问题,condition 在 acquire 时卡住进程了。请教一下大家这种情况怎么解释。
以下是重现问题的代码:
import threading
import Queue
import time
queue = Queue.Queue()
condition = threading.Condition()
def producer():
while True:
with condition:
queue.put(time.time())
time.sleep(1)
def consumer():
while True:
with condition:
a = queue.get()
condition.notify()
print a
threading.Thread(target=producer).start()
threading.Thread(target=consumer).start()
Queue 自带锁了
你有另外用锁,很容易造成死锁的~
还有,要把sleep改为 cond.wait(),这样,notify()才起作用~