Одна вещь, которую я хочу добавить, заключается в том, что если вы читаете официальную документацию в threading lib Python , рекомендуется избегать использования "демонических" потоков, когда вы не хотите, чтобы потоки внезапно заканчивались, флаг, который Паоло Ровелли упомянул .
Из официальной документации:
Потоки демона внезапно останавливаются при завершении работы. Их ресурсы (такие как открытые файлы, транзакции базы данных и т. Д.) Могут быть освобождены неправильно. Если вы хотите, чтобы ваши потоки корректно останавливались, сделайте их недемоническими и используйте подходящий механизм сигнализации, такой как Event.
Я думаю, что создание демонических потоков зависит от вашего приложения, но в целом (и на мой взгляд) лучше не убивать их и не делать их демоническими. В многопроцессорной обработке вы можете использовать is_alive()
, чтобы проверить состояние процесса и «завершить», чтобы завершить их (также вы избежите проблем с GIL). Но иногда вы можете встретить больше проблем, когда выполняете свой код в Windows.
И всегда помните, что если у вас есть «живые потоки», интерпретатор Python будет их ждать. (Из-за этого демон может помочь вам, если не имеет значения, внезапно заканчивается).