我有一个子类 threading.thread 的类。在初始化线程对象的守护进程中,我定期检查线程状态。如果状态不完整并且线程不活跃,这意味着在执行诸如对另一台服务器的 api 调用之类的操作时出现错误。
我的问题是,如果发生这种情况,是否可以复制线程对象并调用 start 方法。我曾考虑在原始对象上再次调用 run 方法,但这会扰乱守护程序工作流程。
任何想法都非常感谢!
C
我有一个子类 threading.thread 的类。在初始化线程对象的守护进程中,我定期检查线程状态。如果状态不完整并且线程不活跃,这意味着在执行诸如对另一台服务器的 api 调用之类的操作时出现错误。
我的问题是,如果发生这种情况,是否可以复制线程对象并调用 start 方法。我曾考虑在原始对象上再次调用 run 方法,但这会扰乱守护程序工作流程。
任何想法都非常感谢!
C
在守护进程中放置一个无限循环,如果出现问题,请检查 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 类型的错误,它将立即重新连接。您可以使解决方案更漂亮,并在重试之前添加一些间隔等。我已经做到了这一点,并且效果很好。