python线程事件:为什么需要clear()
我对Python还很陌生。我正在尝试python线程事件:为什么需要clear(),python,python-3.x,python-multithreading,Python,Python 3.x,Python Multithreading,我对Python还很陌生。我正在尝试线程模块。我遇到了事件对象。 事件对象具有 等待 设置 清除 功能。我知道等待、设置和清除正在做什么。但我不太明白为什么会有一个单独的明确的方法。无法将其包括在set方法实现中吗? 到目前为止,我看到的大多数代码都有set方法和clear方法。以便后续的wait方法调用wait。 我来自Java世界,我忍不住将其与wait和notify方法调用进行比较。Java中没有用于clear的等效方法调用 是否存在使用set而非clear方法的用例?我认为Python的
线程
模块。我遇到了事件
对象。事件对象具有
等待
设置
清除
功能。我知道等待、设置和清除正在做什么。但我不太明白为什么会有一个单独的明确的方法。无法将其包括在set方法实现中吗?
到目前为止,我看到的大多数代码都有
set
方法和clear
方法。以便后续的wait方法调用wait。我来自Java世界,我忍不住将其与wait和notify方法调用进行比较。Java中没有用于clear的等效方法调用
是否存在使用set而非clear方法的用例?我认为Python的
事件与Java的等待/通知实现了不同的抽象,因此它们在不同的情况下很有用
也许您正在寻找Python的类?这看起来更接近Java对象的等待
和通知
机制,甚至遵循相同的方法命名约定
作为一个激励性的例子,考虑一下Python中a的实现,它可以对事件等待,知道异步代码完成时只有set
。在Java中,您必须执行其他操作,因为代码中有一个竞争条件:
synchronized(obj){
如果(!对象有结果){
obj.wait();
}
返回obj.result;
}
是否有使用set而非clear方法的用例
是的,如果要在资源可用之前阻止线程,这是一种不用轮询的方法。此资源可能是启动时未准备就绪的服务器、驱动程序或传感器
另一个需要考虑的情况是如何在不需要线程时暂停线程。让我们以电池供电的安全摄像头为例。摄像机由一个运动传感器启动。视频和音频在电池消耗方面很昂贵。运动传感器设置事件,直到计时器过期且未检测到新的运动。一旦过期,事件将被清除。这会告诉视频和音频线程停止录制
我来自Java世界,我情不自禁地将此与
等待并通知方法调用
java wait、notify和notifyAll方法与python线程条件的行为相匹配。当一个notify或notifyAll线程发出信号时,一个等待线程一次获得锁的控制权。其他等待的线程必须等到该线程释放该锁后才能运行。@404pio我已经读过了。这并没有回答我的问题“是否存在使用set而非clear方法的用例?”请看这里:我承认Java的wait/notify不同于Python的事件。但是在事件对象中,为什么我们需要一个明确的方法呢?是否存在使用set而不使用clear的情况。我想不出任何例子,但我不确定它是否有用。也许您可以添加一个指针,指向Java提供的抽象很容易实现的代码类型,以及为什么在Pythontanks中代码片段(+1)更难实现。不幸的是,这并没有真正的帮助。我不想比较这在Java或python中是否更简单。我的全部观点是,set方法的实现也可以包含clear,而不是用户显式调用它(因为clear总是与set一起使用),但是如果这是您想要的抽象,为什么不使用条件而不是事件呢?