当旧线程死亡时重新启动函数

Posted

技术标签:

【中文标题】当旧线程死亡时重新启动函数【英文标题】:Restart the function when the older thread dies 【发布时间】:2021-06-22 06:02:24 【问题描述】:

我正在从事一些依赖于 websocket 数据的项目。 有时会话会从 API 的另一端过期。 这就是我的线程的声明方式。

streaming_thread = threading.Thread(target=stream_live_load)
streaming_thread.start()

我只想知道如何在线程死亡时使用线程 ID/编号重新启动,并在循环中再次重新启动上述内容,直到我专门杀死它。

【问题讨论】:

这能回答你的问题吗? Is there any way to kill a Thread? 线程有一个is_alive() 方法,您可以使用它来确定它们是否仍在运行,因此您可以使用它定期检查其状态。 为什么线程会死掉?如果您可以在线程中重新启动 websocket(也许处理异常),那么您将不需要重新启动线程。否则,您应该查看线程池。 Python 不允许您明确地重新启动已退出的线程。 【参考方案1】:

一旦一个线程在 Python 中退出,你就不能重新启动它。您必须编写代码来检查正在运行的线程的状态,如果它退出,则显式地重新初始化一个新的 Thread 对象,然后启动新实例。

当然,您可以编写一个容器对象来封装这种行为。

    import threading
    from time import sleep

    def thread_worker(arg1, arg2, arg3):
        print("run(0,1,2)".format(arg1,arg2,arg3))
        sleep(5)
    
    while True:
        print("Restarting thread")
        th = threading.Thread( target = thread_worker, args = (2,3,4) )
        th.start()

        while th.is_alive():
            sleep(1)

【讨论】:

以上是关于当旧线程死亡时重新启动函数的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中重新启动线程

永远重复“内核死亡,重新启动”

Jupyter 错误 - 对于给定的一段代码,“内核似乎已经死亡,它将自动重新启动”

从 UncaughtExceptionHandler 中重新执行任务?

Unity - 单击重新启动按钮后如何重新启动乐谱?

尝试重新启动线程时发生 ThreadStateException