Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 为什么threading.Event是函数而不是类?_Python_Multithreading_Python 2.7_Events - Fatal编程技术网

Python 为什么threading.Event是函数而不是类?

Python 为什么threading.Event是函数而不是类?,python,multithreading,python-2.7,events,Python,Multithreading,Python 2.7,Events,对于我正在进行的项目,我们使用python 2.7。 我需要在两个踏板之间实现同步,一个发出信号,另一个等待。为此,我使用了threading.Event。我通过它的构造函数将这个事件对象注入另一个对象(比如说另一个类的实例)。在另一个类的构造函数中我想验证输入参数,所以我检查了它的类型是否是threading.Event的实例。这就是我感到惊讶的地方,因为这失败了 代码如下所示: from threading import Event class AnotherClass(object):

对于我正在进行的项目,我们使用python 2.7。 我需要在两个踏板之间实现同步,一个发出信号,另一个等待。为此,我使用了
threading.Event
。我通过它的构造函数将这个事件对象注入另一个对象(比如说另一个类的实例)。在
另一个类的构造函数中
我想验证输入参数,所以我检查了它的类型是否是
threading.Event的实例。这就是我感到惊讶的地方,因为这失败了

代码如下所示:

from threading import Event

class AnotherClass(object):
    def __init__(self, event):
        if not isinstance(event, Event):
            raise ValueError("event is not instance of threading.Event"):
    ...

event = Event()
another_object = AnotherClass(event) # raises exception
当我开始调试这个问题时,我发现
threading.Event
实际上是一个返回
threading实例的函数

>>> from threading import Event
>>> Event
<function Event at 0x0000000002B529E8>
>>> e = Event()
>>> e
<threading._Event object at 0x0000000002AE0358>
来自线程导入事件的
>>
>>>事件
>>>e=事件()
>>>e
在python文档页面上,它声明它是一个类。 在我看来,这似乎不合逻辑。例如,threading.Thread的情况并非如此。它实际上是一个类,并且具有构造函数:

>>> Thread
<class 'threading.Thread'>
>>> dir(Thread)
['_Thread__bootstrap', '_Thread__bootstrap_inner', '_Thread__delete', '_Thread__exc_clear', '_Thread__exc_info', '_Thread__initialized', '_Thread__stop', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_block', '_note', '_reset_internal_locks', '_set_daemon', '_set_ident', 'daemon', 'getName', 'ident', 'isAlive', 'isDaemon', 'is_alive', 'join', 'name', 'run', 'setDaemon', 'setName', 'start']
>>线程
>>>目录(线程)
“U线程”的删除,“U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U线程,U引导,U线程,U线程,U线程,U引导,内部,内部,内,内,U线程,U线程,内,U线程,U线程,U线程,U线程,U线程,U线程,引导,内部,内部,内部,内部,内部,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内,内","模块","新模块","减少模块","减少模块","减少模块","减少模块","报告模块","设置属性",__sizeof_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
当然,我可以省略此检查,并让代码在稍后对传递的对象调用某个不存在的方法时失败,但我希望此代码尽快失败

因此,总结一下我的问题:


有人能解释一下执行
线程化.Event
的原因吗?

我不知道在线文档是怎么回事,但您发布的屏幕截图是针对类
线程化的。_Event
,尽管它说是针对类
线程化.Event
<代码>线程。事件
是一个工厂函数,返回
线程的实例。_Event
。我认为这是非常不直观的,特别是因为文档在
threading.Event
threading.\u Event
之间没有印刷上的区别,您有权感到困惑。这是一个说明
线程化的页面。Event
是一个工厂函数(true),它还说明查看实际上是
类线程化的“事件对象”。\u Event
s,并且在文档中被错误地描述为
类线程化。Event

我在谷歌上搜索了一下,看起来这些文档已经以这种方式被破坏很多年了

线程事件是在Python的后续版本中合理创建的