【问题标题】:Do I have to call super.join() when subclassing threading.Thread?子类化threading.Thread时是否必须调用super.join()?
【发布时间】:2014-10-29 05:12:17
【问题描述】:

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

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

我必须明确地调用super.join()吗?明确停止cherrypy服务器后它到底做了什么?

【问题讨论】:

    标签: python multithreading python-2.7 cherrypy


    【解决方案1】:

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

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

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

    这意味着如果你不调用基类join,你的子类'join 将不再阻塞调用线程。如果这是你想要的,你最好只用另一种方法,比如_exitCherrypyBus 左右。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-25
      • 2017-03-07
      • 2019-10-09
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      相关资源
      最近更新 更多