python线程模块中Event和Lock的区别是什么?

时间:2012-07-12 06:48:03

标签: python blocking python-multithreading

EventLock在这些场景中做同样的事情吗?

class MyThread1(threading.Thread):
    def __init__(event):
        self.event = event

    def run(self):
        self.event.wait()
        # do something
        self.event.clear()

另一:

class MyThread2(threading.Thread):
    def __init__(lock):
        self.lock = lock

    def run(self):
        self.lock.acquire()
        # do something
        self.lock.release()

2 个答案:

答案 0 :(得分:5)

如果您等待某个事件,执行将停止,直到event.set()发生

event.wait()  # waits for event.set()

如果已经获得锁定,则获取锁定仅会停止

lock.acquire() # first time: returns true
lock.acquire() # second time: stalls until lock.release()

两个类都有不同的用例。 This article将帮助您了解差异。

答案 1 :(得分:2)

实际上,我发现python中的事件与锁定之间的区别是:

  • 一个事件可以有很多服务员,当事件被设置或触发时,所有这些服务员都将醒来。
  • 一个锁可以有许多侍者,释放锁时,只有一个侍者会醒来,因此将获得该锁。

还有更多区别,但是以上对我来说最明显。