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