从 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" 时设置一些标志来完成,然后让主循环定期检查该标志并在设置标志后进行受控关闭,或者您可以 运行 主循环在您可以全局访问或从另一个线程访问的另一个线程中,然后终止它。请记住,通常不建议强行关闭线程。
我花了一些时间寻找正确的代码,但没有成功。
我有以下 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" 时设置一些标志来完成,然后让主循环定期检查该标志并在设置标志后进行受控关闭,或者您可以 运行 主循环在您可以全局访问或从另一个线程访问的另一个线程中,然后终止它。请记住,通常不建议强行关闭线程。