什么';python线程模块中事件和锁的区别是什么?

什么';python线程模块中事件和锁的区别是什么?,python,blocking,python-multithreading,Python,Blocking,Python Multithreading,在这些场景中,Event和Lock是否执行相同的操作 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):

在这些场景中,
Event
Lock
是否执行相同的操作

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

如果等待一个事件,执行将暂停,直到发生
事件.set()
为止

event.wait()  # waits for event.set()
仅当已获取锁时,获取锁才会暂停

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

两个类都有不同的用例。这将有助于您理解差异

实际上,我发现python中事件与锁的区别在于:

  • 一个事件可以有许多服务员,当事件被设置或触发时,所有这些服务员都会醒来
  • 一个锁可以有很多侍者,当锁被释放时,只有一个侍者会醒来,因此会获得锁
可能还有更多的差异,但以上对我来说是最明显的