Ответ 1
Документация, к которой вы обращаетесь, состоит из двух разных модулей: thread
и threading
. thread
- это низкоуровневый модуль, обеспечивающий более или менее прямой доступ к идее платформы о том, что означает "поток". threading
обеспечивает более высокий уровень понятия "поток" с меньшей зависимостью от платформы.
Вот почему документы говорят разные вещи. То, что происходит с потоком thread
низкого уровня при выходе, зависит от того, что делает потоковая версия платформы C, но в любом случае Python не пытается - или не закрывает их чисто.
A threading.Thread
отличается. Часть обработки нормального завершения Python - это .join()
потоки non-daemon threading.Thread
. Таким образом, программа не закончится вообще до тех пор, пока не закончились потоки не-daemon threading.Thread
(что является ответственностью программиста). Обратите внимание, что потоки модулей нижнего уровня thread
не имеют понятия .join()
- .join()
- это концепция более высокого уровня, реализованная от в отдельном модуле threading
.
Совет. Используйте threading
вместо thread
, если у вас нет отличных причин для использования thread
. threading
лучше вести себя и предоставляет множество полезных инструментов. Пример использования thread
лучше? Я не могу думать об одном: -)
Примечание: в Python 3 низкоуровневый модуль thread
переименовывается в _thread
. Как обычно, ведущие подчёркивающие намеки "лучше не вмешиваться в это, но это здесь, если вам нужно".