繁体   English   中英

从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")

我认为这不是最佳做法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM