我有一个运行cherrypy
服务器的threading.thread
的子类。我join()
方法是这样的:当子类化threading.Thread时,是否必须调用super.join()?
def join(self):
cherrypy.engine.exit()
super(MyThread, self).join()
我必须明确地要打电话super.join()
?在我明确停止cherrypy服务器之后它究竟做了什么?
我有一个运行cherrypy
服务器的threading.thread
的子类。我join()
方法是这样的:当子类化threading.Thread时,是否必须调用super.join()?
def join(self):
cherrypy.engine.exit()
super(MyThread, self).join()
我必须明确地要打电话super.join()
?在我明确停止cherrypy服务器之后它究竟做了什么?
通常,当您重写父类的方法时,应该调用重写的方法,除非您完全确定父类是如何工作的,并且此更改不会打破它。也就是说,更正式的说,继承关系代表is-a
关系,而你的子类仍然是是threading.Thread
,所以它应该相应地采取行动。事实上,继承联系的主题非常广泛,如果您有兴趣,您可能需要从Liskov substitution principle开始。
Python文档声明约threading.Thread.join([timeout])
。
等到线程终止。这将阻塞调用线程,直到线程的 join()方法被调用终止 - 通常或通过未处理的 异常 - 或直到发生可选的超时。
这意味着如果您不打电话给基地join
,您的子类'join
将不再阻止调用线程。如果这是你想要的,你最好只是制作另一种方法,如_exitCherrypyBus
左右。