Trabalhando com Threads
Deslize para mostrar o menu
O módulo threading do Python oferece uma maneira simples e poderosa de criar e gerenciar threads, permitindo a execução de múltiplas operações concorrentemente dentro de um único processo. As threads são unidades leves de execução que compartilham o mesmo espaço de memória, tornando-as adequadas para tarefas como operações de I/O, espera por recursos externos ou atualização de interfaces de usuário.
O ciclo de vida de uma thread normalmente envolve várias etapas:
- Criação: um objeto thread é instanciado, mas ainda não iniciado;
- Inicialização: o método
start()da thread é chamado, movendo-a para o estado pronto para execução; - Execução: a thread executa sua função alvo;
- Finalização: a thread termina a execução, seja ao concluir sua tarefa ou ao encontrar uma exceção não tratada.
O gerenciamento de threads exige atenção cuidadosa à sincronização, já que as threads compartilham dados e recursos. Sem a sincronização adequada, podem ocorrer condições de corrida ou estados inconsistentes. O módulo threading oferece primitivas como Lock, RLock e Event para ajudar a coordenar o acesso das threads a recursos compartilhados.
A seguir, uma tabela apresenta funções que auxiliam na criação, gerenciamento e sincronização de threads de forma eficaz ao trabalhar com tarefas concorrentes em Python.
O exemplo a seguir demonstra como criar e iniciar múltiplas threads utilizando o módulo threading, permitindo que várias tarefas sejam executadas concorrentemente.
123456789101112131415161718192021import threading import time def print_numbers(name): for i in range(1, 4): print(f"Thread {name}: {i}") time.sleep(0.5) # Create thread objects thread1 = threading.Thread(target=print_numbers, args=("A",)) thread2 = threading.Thread(target=print_numbers, args=("B",)) # Start the threads thread1.start() thread2.start() # Wait for both threads to finish thread1.join() thread2.join() print("Both threads have finished.")
Você define uma função, print_numbers, que imprime uma sequência de números junto com o nome da thread. Ao criar cada thread, você passa argumentos usando o parâmetro args – aqui, cada thread recebe um nome diferente ("A" ou "B"), facilitando a distinção das saídas. Ao chamar o método start(), ambas as threads iniciam a execução e rodam concorrentemente. A chamada time.sleep(0.5) dentro do loop simula um atraso na execução, permitindo que as threads intercalem suas saídas e tornando fácil perceber que ambas estão rodando ao mesmo tempo. O método join() é então utilizado para aguardar a finalização das duas threads antes de prosseguir, garantindo que o programa principal não termine prematuramente. Essa abordagem permite que tarefas sejam executadas em paralelo, aproveitando de forma eficiente os tempos de espera e possibilitando a execução concorrente dentro de um único processo.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo