从 backround_thread 重新启动 python 脚本

Restart a python script from backround_thread

我花了一些时间寻找正确的代码,但没有成功。

我有以下 python 脚本,其中包含后台线程和主程序。我想在后台线程遇到问题后重新启动脚本。希望你能帮我解决这个问题。 TIA

使用此脚本,background_stuff 和 "main" 同时是 运行。

def background_stuff():
    while True:
        if condition == 'True':
            ### restart the script
t = Thread(target=background_stuff)
t.start()
### main
if __name__ == '__main__':
    while True:
          #do something

你能像这样重构你的脚本吗?

def main():
    t = Thread(target=background_stuff)
    t.start()
    while True:
        #do something

def background_stuff():
    while True:
        if condition == 'True':
            ### restart the script
#t = Thread(target=background_stuff)
#t.start()
### main
if __name__ == '__main__':
    main()

现在调用 main 应该会创建一个新线程,它将 运行 后台内容和脚本基本上重新启动。唯一的问题是状态未重置。如果您需要重置状态,那么您实际上可以 运行 从脚本中使用以下命令从头开始编写脚本:

os.system("yourScript.py -yourargs")

不过我认为这不是最佳做法...

无论您最终使用哪种解决方案,您仍然需要终止旧的主循环。这可以通过在 "restart your script" 时设置一些标志来完成,然后让主循环定期检查该标志并在设置标志后进行受控关闭,或者您可以 运行 主循环在您可以全局访问或从另一个线程访问的另一个线程中,然后终止它。请记住,通常不建议强行关闭线程。