Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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 Can线程。事件';s set()或clear()函数在任何情况下都会失败_Python_Multithreading_Python 2.7 - Fatal编程技术网

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仅由主线程处理,即使底层平台允许这样做。这不是一条真正的规则,但对于核心模块,如
线程
,你可以打赌,有人会抱怨跨平台的不一致性。