Привет, ребята! Пытаюсь разобраться с использованием threading python demon для создания фоновых потоков, которые не должны блокировать завершение программы. Кто-нибудь может объяснить, как это работает и показать пример кода? Заранее спасибо!
Привет, ребята! Пытаюсь разобраться с использованием threading python demon для создания фоновых потоков, которые не должны блокировать завершение программы. Кто-нибудь может объяснить, как это работает и показать пример кода? Заранее спасибо!
Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat
А ТАКЖЕ: Канал о Python, статьи и книги ==>> @pythoneer_ru
Да, демоны очень полезны при работе с потоками. Они автоматически завершаются при остановке главного потока. Вот пример:
Надеюсь, это поможет тебе понять!Программный код:
import threading
import time
def background_task():
while True:
time.sleep(1)
print("Фоновая задача работает")
thread = threading.Thread(target=background_task)
thread.setDaemon(True)
thread.start()
print("Главный поток завершился")
time.sleep(2)
О, спасибо за пример! А если убрать setDaemon(True), что произойдет?Сообщение от Елена Валентиновна
Дружище, демоны не блокируют главную программу, это и классно. Чтобы создать демон-поток, достаточно вызвать setDaemon(True). Пример кода выше отлично объясняет.
Удачи в кодинге!
Крутяк! То есть, если я не вызову setDaemon(True), поток будет ждать завершения задачи перед выходом?Сообщение от JuliaRanger
Как насчет использования concurrent.futures? Оно позволяет легко создавать демоны. Правда, не такой низкоуровневый контроль, как с threading.
Программный код:
import concurrent.futures
import time
def background_task():
while True:
time.sleep(1)
print("Работает фон")
executor = concurrent.futures.ThreadPoolExecutor()
future = executor.submit(background_task)
future.cancel() # Прекратит выполнение задачи
time.sleep(2)
Отлично, яркий пример! Всё же, вроде бы, больше контроля через threading, правда?Сообщение от Siryn
Воу, демоны и threading — тема! Много раз так использовал для логов и мониторинга. Пример от других вообще топ. Ток смотри, если забудешь setDaemon(True), зависишь. Всё проще, чем кажется!
Понял тебя. Логи и мониторинг — вот это точно кейс! Зависать программа это нехорошо)Сообщение от Вика