3

我有一个子类 threading.thread 的类。在初始化线程对象的守护进程中,我定期检查线程状态。如果状态不完整并且线程不活跃,这意味着在执行诸如对另一台服务器的 api 调用之类的操作时出现错误。

我的问题是,如果发生这种情况,是否可以复制线程对象并调用 start 方法。我曾考虑在原始对象上再次调用 run 方法,但这会扰乱守护程序工作流程。

任何想法都非常感谢!

C

4

1 回答 1

1

在守护进程中放置一个无限循环,如果出现问题,请检查 isAlive()/is_alive() 方法。如果它刚刚使用相同的值启动了一个新对象。

解决问题的另一种方法是在线程对象中捕获真正的问题,并在那里处理问题。我假设您的 run() 方法中有一个循环。只需将所有内容放在循环中的 try/except 子句中,该子句将重新初始化您为检查其他服务器所做的一切。

像这样的东西:

def run(self):
    while 1:
        try:
            if not server.isconnected():
                server.connect()

            server.getsomeinfo()
        except server.error as x:
            server.disconnect()

        time.sleep(1)

一旦出现 server.error 类型的错误,它将立即重新连接。您可以使解决方案更漂亮,并在重试之前添加一些间隔等。我已经做到了这一点,并且效果很好。

于 2013-08-08T18:53:44.660 回答