在子类化threading.Thread时我是否必须调用super.join()?

时间:2014-10-29 05:12:18

标签: python multithreading python-2.7 cherrypy

我有一个运行threading.thread服务器的cherrypy子类。我的join()方法如下所示:

def join(self):
    cherrypy.engine.exit()
    super(MyThread, self).join()

我是否必须明确打电话给super.join()?在我明确停止了cherrypy服务器后它到底做了什么?

1 个答案:

答案 0 :(得分:1)

通常,当您覆盖父类的方法时,您应该调用重写的方法,除非您完全确定父类的工作方式,并且此更改不会破坏它。也就是说,更正式地说,继承代表is-a关系,而你的子类仍然是 threading.Thread,所以它应该采取相应的行动。事实上,继承联系的主题非常广泛,如果您有兴趣,可能需要从Liskov substitution principle开始。

Python文档说明了threading.Thread.join([timeout])

  

等到线程终止。这会阻塞调用线程,直到线程为止   join()方法被称为终止 - 通常或通过未处理   异常 - 或直到可选超时发生。

这意味着,如果您不打电话给基地join,那么您的子类就是' join将不再阻止调用线程。如果这是您想要的,那么您最好只使用_exitCherrypyBus左右的其他方法。