Если вы хотите просто уничтожить поток, вы можете использовать многопроцессорную обработку, которую может выполнять многопроцессорная обработка. Процесс может p.terminate ()
p = Process(target=flash, args=(,))
while True:
runMode = input("Run or Stop? ")
if runMode == "Run":
p.start()
elif runMode == "Stop":
p.terminate()
Однако не рекомендуется просто уничтожать потоки, поскольку это может привести к ошибкам, если процесс обрабатывает критические ресурсы или зависит от других потоков, см. здесь для лучшего объяснения Есть ли способ уничтожить поток?
Лучший способ, как описано здесь, заключается в использовании флагов для обработки ваши перепрошивки, они позволяют простое взаимодействие между потоками
from threading import Event
e = event()
def check_for_stop(e):
while not e.isSet():
flash()
print("Flashing Ended")
while True:
runMode = input("Run or Stop? ")
if runMode == "Run":
x = threading.Thread(target=check_for_stop, args=(e,))
x.start()
# x.join()
elif runMode == "Stop":
e.set() #set flag true
e.clear() #reset flag
вот документация для получения дополнительной информации об объектах событий https://docs.python.org/2.0/lib/event-objects.html
Я не проверял этот код просто пример, поэтому извиняюсь, если он не работает сразу
Редактировать: Просто глядя на вашу функцию еще раз, вы захотите проверить флаг во время перепрошивки, это моя ошибка, извиняется, так что ваша функция fla sh будет выглядеть как
def flash():
while e.isSet():
board.digital[13].write(1)
time.sleep(1)
board.digital[13].write(0)
time.sleep(1)
, и вы передадите это в поток, как раньше
x = threading.Thread(target=flash(), args=(1,))
x.start()