Python - Threads

Esse é um post breve, para mostrar um exemplo sobre o uso de Threads em Python.

[ Hits: 19.102 ]

Por: Alisson Machado em 18/12/2016


Python - Threads



Esse é um post breve para mostrar um exemplo sobre o uso de Threads em Python.

Threads são uma forma de fazer com que a sua aplicação execute tarefas de forma assíncrona, por exemplo, enquanto uma estrutura de repetição é executada você pode executar uma outra rotina.

Um exemplo seria uma Daemon de um serviço do sistema operacional, como por exemplo o Apache. O Apache é um servidor Web que, quando iniciado, cria processo principal que espera por conexões do tipo HTTP, no momento em que uma requisição é recebida, ele inicia um subprocesso que responde para o cliente e o processo principal continua aguardando por novas requisições, por este motivo é possível responder a centenas de conexões, simultaneamente.

A linguagem Python já vem com um módulo nativo para fazer o uso de Threads, o nome desse módulo é threading.

Para fazer a importação dele, é necessário adicionar a seguinte instrução no seu script:

#!/usr/bin/python

import threading
import time

Estou importando também o módulo "time" para mostrar a função que será executada em segundo plano.

A partir disso, você pode criar uma função qualquer, como o exemplo abaixo:

def worker(message):
    for i in range(5):
       print message
       time.sleep(1)

Basicamente, essa função espera uma mensagem como parâmetro e essa mensagem será executada 5 vezes em intervalos de 1 segundo, esse intervalo foi definido com a instrução "time.sleep(1)".

t = threading.Thread(target=worker,args=("thread sendo executada",))
t.start()

As linhas acima fazem a instância de uma "thread" e a execução dessa "thread".

Na primeira linha, é criado o objeto "t" que espera dois parâmetros, sendo o primeiro deles o "target" que é o nome de uma função do seu script, no nosso caso a função worker, esse parâmetro é obrigatório.

O segundo parâmetro é opcional, ele se refere aos argumentos que serão passados para a função que será executada em segundo plano, o parâmetro "args" espera como argumento uma "tupla" com os valores da função.

while t.isAlive():
    print "Aguardando thread"
    time.sleep(5)

print "Thread morreu"
print "Finalizando programa"

Nesse último trecho de código, é criado uma estrutura de repetição "while" e a condição que ela recebe é se a thread "t" ainda está sendo executada, caso esteja, será retornado o valor "True", então o bloco de código do "while" é executado, caso seja "False" significa que a "thread" já terminou e então serão executadas as instruções após o "while".

O script completo ficou da seguinte forma:

#!/usr/bin/python

import threading
import time

def worker(message):
    for i in range(5):
        print message
        time.sleep(1)

t = threading.Thread(target=worker,args=("thread sendo executada",))
t.start()
while t.isAlive():
    print "Aguardando thread"
    time.sleep(5)

print "Thread morreu"
print "Finalizando programa"

Qualquer dúvida, tamo ae o.

Alisson Machado – http://responsus.com.br

   

Páginas do artigo
   1. Python - Threads
Outros artigos deste autor

Sincronizando Dados do PostgreSQL no Elasticsearch

Python + ADB

Python Flask Básico

Vault: SSH com OneTimePassword

Sockets em Python

Leitura recomendada

Reconhecimento de placas de veículos com OpenALPR

Gerar Códigos QRCode com Python

Clicador automático de Tinder com Python

Desenvolvendo aplicações GUI simples em Python & Glade (PyGTK) com banco de dados SQLite

Sockets em Python

  
Comentários
[1] Comentário enviado por tonnytg em 18/01/2017 - 22:29h

Show, muito bem explicado.
Favoritado


Att,
Antonio Thomacelli Gomes
http://www.tonnytg.com.br
LPIC-2 Certified Linux Engineers

[2] Comentário enviado por COBY em 20/03/2017 - 22:56h

Já tinha criado uns scripts no Python3 usando threading, o que eu notei foi essa linha abaixo:
t = threading.Thread(target=worker,args=("thread sendo executada",))

Fiquei durante um período usando as funções sem argumento, pensando não ser possível. O que me faltou foi ler a documentação.
Mas nem precisei ler a doc. aprendi algo hoje, e foi aqui. Obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts