Python Can线程。事件';s set()或clear()函数在任何情况下都会失败
是否存在Python Can线程。事件';s set()或clear()函数在任何情况下都会失败,python,multithreading,python-2.7,Python,Multithreading,Python 2.7,是否存在线程化.Event的set()或clear()可能失败的情况,即。再次调用set()而不调用clear()等 现在,我正在添加try exceptblock来阻止所有set()和clear()调用 在中,这没有具体规定 我问这个问题是因为直觉上,如果您设置了一个已设置的布尔标志或清除了它,则引发异常是没有意义的 事件的真实性是一个简单的布尔值,由锁保护 class Event: """Class implementing event objects. Events ma
线程化.Event
的set()
或clear()
可能失败的情况,即。再次调用set()
而不调用clear()
等
现在,我正在添加try except
block来阻止所有set()
和clear()
调用
在中,这没有具体规定
我问这个问题是因为直觉上,如果您设置了一个已设置的布尔标志或清除了它,则引发异常是没有意义的
事件的真实性是一个简单的布尔值,由锁保护
class Event:
"""Class implementing event objects.
Events manage a flag that can be set to true with the set() method and reset
to false with the clear() method. The wait() method blocks until the flag is
true. The flag is initially false.
"""
def __init__(self):
self._cond = Condition(Lock())
self._flag = False
设置和清除只是获取锁并设置值。不涉及切换,也不检查以前的值。没有显式抛出异常-您当然可以得到一般异常,例如键盘中断
谢谢您的回复。我试过了,效果很好。但我来自C语言背景,所以我在想这是否总是正确的,即在所有平台中,等等@Don'tYouWorryChild一般来说,Python选择最小公分母。例如,signal
s仅由主线程处理,即使底层平台允许这样做。这不是一条真正的规则,但对于核心模块,如线程
,你可以打赌,有人会抱怨跨平台的不一致性。