Python - Threads

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

[ Hits: 18.623 ]

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

Python + ADB

Vault: SSH com OneTimePassword

Sockets em Python

Python Flask Básico

paramiko - Python + SSH

Leitura recomendada

Splash Screen para Inkscape

RapidScan - Multi-Tool WEB Vulnerability Scanner

Esteganografia e Esteganálise: transmissão e detecção de informações ocultas em imagens digitais

Scikit Learn: Projetando o futuro de suas APIs e aplicativos usando machine learning

Construindo um portscanner TCP com 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