我有一个继承threading.thread的类。在初始化线程对象的守护进程中,我定期检查线程状态。如果状态不完整且线程不活动,则意味着执行类似api调用其他服务器的错误。
我的问题是,如果发生这种情况,可以制作线程对象的副本并调用start方法。我曾考虑在原始对象上再次调用run方法,但这会弄乱守护进程工作流。
任何想法都非常感谢!
C
答案 0 :(得分: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类型出错,它就会重新连接。您可以使解决方案更漂亮,并在重试之前添加一些间隔等。我已经完成了这个并且它完美地工作。