为何 python condition acquire 会阻塞线程?

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()
阅读 6k
2 个回答

Queue 自带锁了

你有另外用锁,很容易造成死锁的~

还有,要把sleep改为 cond.wait(),这样,notify()才起作用~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题