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.