【问题标题】:What's the difference of Event and Lock in python threading module?python线程模块中的Event和Lock有什么区别?
【发布时间】:2012-07-11 21:06:43
【问题描述】:

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()

【问题讨论】:

    标签: python blocking python-multithreading


    【解决方案1】:

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

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

    只有在已经获取锁的情况下获取锁才会停止

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

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

    【讨论】:

      【解决方案2】:

      实际上,我发现python中Event和Lock的区别是:

      • 一个事件可以有多个等待者,当事件被设置或触发时,所有这些等待者都会被唤醒。
      • 一个锁可以有多个等待者,当锁被释放时,只有一个等待者会被唤醒并因此获得锁。

      可能还有更多差异,但以上对我来说是最明显的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-18
        • 2011-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 2010-10-17
        • 2019-02-04
        相关资源
        最近更新 更多