Я программирую для малины Pi с библиотекой Киви, и у меня была аналогичная проблема. Комментарии в этом разделе помогли мне решить эту проблему.
В моем случае Kivy использует объекты «Clock()» для вызова функции с определенными временными интервалами, обеспечивая основной цикл программы.
Как оказалось, хотя все работает нормально на ПК (в Linux или Windows), на Raspberry Pi вы должны вручную остановить все циклы программ, иначе «sys.exit()» не будет работать.
Сначала у меня была команда «sys.exit()» при нажатии клавиши. Это не работало для Малины. Таким образом, вместо этого я использовал глобальную переменную, которая изменила бы значение при нажатии клавиши выхода и проверила бы ее значение в программном цикле, где я тогда называл «sys.exit()» (и «return False», что сигнализирует Kivy для уничтожения объекта Clock()).
Я также использовал отдельные объекты Clock() для некоторых анимаций в своей программе, и я заметил, что если я нажму кнопку exit во время анимации, моя программа замерзнет без выхода - как и раньше, потому что «sys.exit()» был вызван, когда выполнялись объекты Clock().
Суть - если у вас есть проблемы с «sys.exit()» на Raspberry Pi, убедитесь, что все программы петли в коде остановлены перед вызовом sys.exit().
В качестве наиболее простого примера, если у вас есть программа, запущенная цикл вроде
while True:
использовать вместо
while running:
# where running = True
изменится на "бегущих = False" перед вызовом «sys.exit ()».
Вы упомянули темы: не-демонические потоки не убиты 'sys.exit()' и могут сохранить ваш процесс в живых. Вы можете проверить выполнение потоков с помощью ['active_count'] (https://docs.python.org/3/library/threading.html#threading.active_count) и [' enumerate'] (https: //docs.python. org/3/library/threading.html # threading.enumerate) –
Я попробую предложить threading.enumerate и оставить потоки: <_Timer (токарно-6, начало 652)> <_MainThread (MainThread, начал 4180)> < _Timer (Thread-5, начал 7384)> Я не знаю эти темы ... –
maiagarbot
Измените свой вопрос, добавив эту информацию (чтобы их было легче читать). Как вы можете видеть, большинство потоков являются демонами, поэтому вы можете их игнорировать. Единственными недемоническими являются два '' Тимера'. Осмотрите их (они должны иметь атрибут '.function') –