我一直在寻找正确的代码,但我没有运气。
我有下面的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
答案 0 :(得分:2)
你可以像这样重构你的剧本吗?
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")
我不认为这是最好的做法......
无论您最终使用哪种解决方案,您仍然需要终止旧的主循环。这可以通过在“重新启动脚本”时设置一些标志来完成,然后让主循环定期检查该标志并在设置标志后进行受控关闭,或者可以在另一个线程中运行主循环。您可以全局访问或从其他线程访问,然后终止它。请记住,通常不建议强行关闭线程。