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

pvp*_*ran 6 python python-multithreading python-3.x

我对 Python 还很陌生。我正在尝试使用threading模块。我遇到了Event物体。
事件对象具有
wait
set
clear
函数。我明白 wait、set 和clear 正在做什么。但我不太明白为什么有一个单独的明确方法。难道不能将其包含在 set 方法实现中吗?
到目前为止我看到的大多数代码都是set方法后面跟着一个clear方法。以便后续的wait方法调用wait。
我来自 Java 世界,我忍不住将其与 wait 和 notification 方法调用进行比较。需要明确的是,Java 中没有等效的方法调用。

是否存在使用 set 但不明确方法的用例?

Sam*_*son 1

我想说 Python 的Events 与 Java 的wait/notify正在实现不同的抽象,因此它们在不同的情况下很有用。

也许你正在寻找Python的Condition课程?这看起来更接近 JavaObjectwait机制notify,甚至遵循相同的方法命名约定

Future作为一个激励性的例子,考虑一下Python 中a 的实现,它可以只wait知道Event只有set当异步代码完成时才执行。在 Java 中,你必须做其他事情,因为代码中存在竞争条件:

synchronized (obj) {
  if (!obj.has_result) {
    obj.wait();
  }
  return obj.result;
}
Run Code Online (Sandbox Code Playgroud)