Python Threads

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×

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:

1
2
3
4
#!/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:

1
2
3
4
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).

1
2
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.

1
2
3
4
5
6
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/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.

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×
1 ano ago

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *