multithreading - 复制死线程

标签 multithreading python-2.7

我有一个子类 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/

相关文章:

c++ - volatile 成员函数的性能后果

python - 如果线程处于无限 while 循环中,会发生什么情况?

python - 检查父线程是否正在运行

c++ - 字符串流和多线程

python - 导入 zlib ImportError : No module named zlib

javascript - 如何抓取页面的动态 URL?

python - 一张图片上的多个图表(python)

java - 基本tomcat网站: threads or processes?

python - pypokereval 库配置脚本失败,错误代码为 "No python development environments found"

python - scikit-learn 线性回归的意外交叉验证分数