您的
__init__方法是完全多余的。您实际上是在替换
Thread.__init__()自己的实现,而您自己的实现只需调用即可
Thread.__init__()。如果删除它,则什么都不会改变:
class Example(Thread): def run (self): print("It works!")
Example.run()之所以简称您的方法,是因为您使用
Thread.start()方法启动了线程:
start()
启动线程的活动。每个线程对象最多只能调用一次。它安排
run()在单独的控制线程中调用对象的方法。
另请参阅
Thread.run()文档:
run()
表示线程活动的方法。您可以在子类中重写此方法。标准
run()方法调用传递给对象构造函数的可调用对象作为目标参数(如果有),并分别从args和kwargs参数中获取顺序参数和关键字参数。
您的
__init__方法与此无关。
现在,如果你创建了
__init__一个方法
Thread子类,当时也 不能
确保
Thread.__init__被调用,然后你设置的重要实例的信息,打破实例防止类:
>>> from threading import Thread>>> class Example(Thread):... def run (self):... print("It works!")... >>> Example().start()It works!>>> class BrokenExample(Thread):... def __init__(self):... # not doing anything... pass... def run (self):... print("It works!")... >>> BrokenExample().start()Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/.../lib/python2.7/threading.py", line 737, in start raise RuntimeError("thread.__init__() not called")RuntimeError: thread.__init__() not called
因为这是一个常见错误,所以该
Thread.start方法将引发一个自定义异常,以明确告诉您
Thread.__init__未执行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)