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