我有一个子类 threading.thread 的类。在初始化线程对象的守护进程中,我定期检查线程状态。如果状态不完整且线程不活动,这意味着在执行类似于对另一台服务器的 api 调用时出现错误。
我的问题是,如果发生这种情况,是否可以复制线程对象并调用启动方法。我曾考虑在原始对象上再次调用 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 类型的错误,就会重新连接。您可以使解决方案更漂亮,并在重试之前添加一些时间间隔等。我已经做到了这一点,并且效果很好。
关于multithreading - 复制死线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070423/