当旧线程死亡时重新启动函数
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)
【讨论】:
以上是关于当旧线程死亡时重新启动函数的主要内容,如果未能解决你的问题,请参考以下文章
Jupyter 错误 - 对于给定的一段代码,“内核似乎已经死亡,它将自动重新启动”