Threads do Daemon Python

Resumo : neste tutorial, você aprenderá sobre threads daemon Python e como usá-los de forma eficaz.

Introdução aos threads do daemon Python

Em Python, todo programa possui pelo menos um thread chamado thread principal. Para criar um programa que possui mais de um thread, você usa o módulo threading . Ao usar vários threads, você pode executar tarefas simultaneamente.

Às vezes, você pode querer executar uma tarefa em segundo plano. Para fazer isso você usa um tipo especial de thread chamado thread daemon .

Por definição, threads daemon são threads de segundo plano . Em outras palavras, os threads daemon executam tarefas em segundo plano.

Threads daemon são úteis para executar tarefas que suportam threads não-daemon no programa. Por exemplo:

  • Registrar informações em um arquivo em segundo plano.
  • Remova o conteúdo de um site em segundo plano.
  • Salve automaticamente os dados em um banco de dados em segundo plano.

Criando um thread daemon

Para criar um thread daemon, você define daemonto Trueno Threadconstrutor:

t = Thread(target=f, deamon=True)Linguagem de código:  Python  ( python )

Como alternativa, você pode definir a daemonpropriedade como Truedepois de criar a Threadinstância do:

t = Thread(target=f)
t.deamon = TrueLinguagem de código:  Python  ( python )

Um exemplo de thread daemon

O exemplo a seguir mostra como criar um thread não-daemon que mostra o número de segundos que o programa está aguardando:

from threading import Thread
import time


def show_timer():
    count = 0
    while True:
        count += 1
        time.sleep(1)
        print(f'Has been waiting for {count} second(s)...')


t = Thread(target=show_timer)
t.start()

answer = input('Do you want to exit?\n')Linguagem de código:  Python  ( python )

Como funciona.

Primeiro, defina uma função show_timer()que exiba o número de segundos que o programa esperou.

Segundo, crie um novo thread que execute a show_timer()função:

t = Thread(target=show_timer)Linguagem de código:  Python  ( python )

Terceiro, inicie o tópico:

t.start()Linguagem de código:  Python  ( python )

Por fim, chame a input()função para solicitar a entrada dos usuários:

answer = input('Do you want to exit?\n')Linguagem de código:  Python  ( python )

Se você executar o programa, ele mostrará a seguinte saída e será executado para sempre.

Do you want to exit?Has been waiting for 1 second(s)...
Has been waiting for 2 second(s)...
Has been waiting for 3 second(s)...
Has been waiting for 4 second(s)...
Y
Has been waiting for 5 second(s)...
Has been waiting for 6 second(s)...Linguagem de código:  Python  ( python )

Para encerrar o programa, você precisa encerrar o terminal.

O programa é executado indefinidamente porque o thread tnão é daemon. O programa precisa aguardar a conclusão de todos os threads não-daemon antes de poder sair.

Agora, vamos transformar o thread em um thread daemon:

from threading import Thread
import time


def show_timer():
    count = 0
    while True:
        count += 1
        time.sleep(1)
        print(f'Has been waiting for {count} second(s)...')


t = Thread(target=show_timer, daemon=True)
t.start()

answer = input('Do you want to exit?\n')
Linguagem de código:  Python  ( python )

Se você executar o programa, inserir algo e pressionar Enter, o programa será encerrado. Por exemplo:

Do you want to exit?
Has been waiting for 1 second(s)...
YLinguagem de código:  Python  ( python )

O programa termina porque não precisa esperar a conclusão do thread do daemon. Além disso, o thread daemon é eliminado automaticamente quando o programa é encerrado.

Threads daemon vs. threads não-daemon

A tabela a seguir ilustra as diferenças entre threads daemon e não-daemon:

Tópicos de Daemon Threads não-daemon
Criação de tópico t = Thread(target=f, daemon=True) t = Thread(target=f)
O programa precisa esperar antes de sair Não Sim
Tipo de tarefas Não é crítico como o registro Crítico

Resumo

  • Um thread daemon é um thread em segundo plano.
  • Um thread daemon é útil para executar tarefas que não são críticas.
  • O programa pode sair e não precisa esperar que os threads do daemon sejam concluídos.
  • Um thread daemon é automaticamente eliminado quando o programa é encerrado.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *