Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python线程事件:为什么需要clear()_Python_Python 3.x_Python Multithreading - Fatal编程技术网

python线程事件:为什么需要clear()

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的

我对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一起使用),但是如果这是您想要的抽象,为什么不使用
条件而不是
事件呢?