Перезапустите скрипт Python из backround_thread
Я потратил некоторое время на поиск правильного кода, но мне не повезло.
У меня ниже сценарий python с фоновым потоком и основной прогой.. Я хочу перезапустить сценарий, как только фоновый поток встречает условие. Надеюсь, вы можете помочь мне с этим. ТИА
С этим сценарием и 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
1 ответ
Можете ли вы реструктурировать свой сценарий так?
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")
Я не думаю, что это лучшая практика, хотя...
Независимо от того, какое решение вы в конечном итоге используете, вам все равно нужно завершить старый основной цикл. Это можно сделать, установив какой-либо флаг, когда вы "перезапускаете скрипт", а затем периодически проверяете основной флаг на наличие этого флага и выполняете контролируемое отключение, как только этот флаг установлен, или вы можете запустить основной цикл в другом потоке, который Вы можете получить доступ глобально или из другого потока, а затем прекратить его. Просто помните, что принудительное закрытие потока часто не рекомендуется.