Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Trabalhando com Threads | Multithreading vs. Multiprocessing
Programação Estrutural em Python

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.

123456789101112131415161718192021
import 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.

question mark

Qual das seguintes afirmações sobre sincronização de threads em Python está correta?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 3. Capítulo 2
some-alt