Объекты Thread
Класс Thread представляет действие, которое выполняется в отдельном потоке управления. Есть два способа указать действие: передав вызываемый объект в конструктор или переопределив метод run () в подклассе. Никакие другие методы (кроме конструктора) не должны переопределяться в подклассе. Другими словами, переопределяйте только методы init () и run () этого класса.
После того, как объект потока создан, его деятельность должна быть запущена путем вызова метода start () потока. Это вызывает метод run () в отдельном потоке управления.
Как только активность потока запущена, он считается «живым». Он перестает быть активным, либо обычно когда его метод run () завершается, либо при возникновении необработанного исключения. Метод is_alive () проверяет, жив ли поток.
Другие потоки могут вызывать метод потока join (). Это блокирует вызывающий поток до тех пор, пока не завершится поток, чей метод join () вызван.
У потока есть название. Название может быть передано в конструктор и прочитано или изменено с помощью атрибута name.
Если метод run () вызывает исключение, для его обработки вызывается threading.excepthook (). По умолчанию threading.excepthook () молча игнорирует SystemExit.
Поток можно пометить как «демона-поток». Значение этого флага заключается в том, что вся программа Python завершается, когда остаются только потоки демона. Начальное значение наследуется от создающего потока. Флаг может быть установлен через свойство демона или аргумент конструктора демона.
Потоки демона внезапно останавливаются при завершении работы. Их ресурсы (такие как открытые файлы, транзакции базы данных и т. д.) могут быть освобождены неправильно. Если вы хотите, чтобы ваши потоки корректно останавливались, сделайте их недемоническими и используйте подходящий механизм сигнализации, такой как Event.
Есть объект «основной поток»; это соответствует начальному потоку управления в программе Python. Это не поток демона.
Есть вероятность того, что будут созданы «объекты фиктивного потока». Это объекты потоков, соответствующие «чужеродным потокам», которые представляют собой потоки управления, запускаемые вне модуля потоковой передачи, например непосредственно из кода C. Объекты фиктивного потока имеют ограниченную функциональность; они всегда считаются живыми и демоническими, и их нельзя объединить join (). Они никогда не удаляются, так как невозможно обнаружить завершение чужих потоков.
Last updated