поток.start_new_thread против многопоточности.Thread.start

#python #multithreading #new-operator

#python #многопоточность #новый оператор

Вопрос:

В чем разница между thread.start_new_thread и threading.Thread.start в python?
Я заметил, что при start_new_thread вызове новый поток завершается, как только завершается вызывающий поток. threading.Thread.start наоборот: вызывающий поток ожидает завершения других потоков.

Ответ №1:

thread Модуль представляет собой низкоуровневый потоковый API Python. Его прямое использование не рекомендуется, если вам действительно не нужно. threading Модуль представляет собой высокоуровневый API, построенный поверх thread . Thread.start Метод фактически реализован с использованием thread.start_new_thread .

daemon Атрибут Thread должен быть установлен перед вызовом start , указывая, должен ли поток быть демоном. Вся программа Python завершается, когда не осталось живых потоков, не относящихся к демону. По умолчанию daemon равно False , поэтому поток не является демоном, и, следовательно, процесс будет ожидать завершения всего своего недемонического потока, что и является поведением, которое вы наблюдаете.


PS start_new_thread действительно очень низкоуровневый. Это просто тонкая оболочка вокруг основной программы запуска потоков Python, которая сама вызывает функцию создания потоков ОС.

Ответ №2:

Посмотрите на потоковую обработку.Флаг Thread.daemon — в принципе, всякий раз, когда не выполняются потоки, не относящиеся к демону, интерпретатор завершается.