Threads - Importância dentro de um software
Este artigo engloba todas as funcionalidades das threads dentro do sistema operacional e dentro de futuros softwares que vocês desejarem construir. Aqui usarei exemplos em Python para poder demonstrar a funcionalidade das threads dentro do nosso dia a dia do desenvolvimento.
Parte 2: Criando Threads em Python
Agora vamos ver como funciona a criação de threads dentro do Python 3.1, logo após entendermos o que é uma thread vamos entender como as threads dentro do Python funcionam.
Dentro do Python as funções de threads estão dentro de uma classe chamada threading.Threads, esta classe tem todas as funções necessárias para manutenção de threads dentro do Python, antes de utilizá-la você deve importar o modulo threading usando "import. threading", mas para podermos utilizá-la precisamos criar uma nova classe que irá herdar da classe threading.Threads da seguinte forma:
Nesta linha de código você acabou de herdar todos os métodos da classe threading.Thread. Após você ter feito a herança você deve adicionar uma linha no seu construtor __init__, a linha a ser adicionada deve ser:
Esta linha será a responsável por inicializar a thread dentro do SO. Após isso, e após a criação de todos os métodos você deve criar mais um método chamado run(self): este método é o que vai executar sua thread, este método é sobrecarregado da classe pai, onde dentro dele você deve fazer as chamadas de funções ou de outras classes, pois devemos lembrar que esta classe é apenas uma classe para threads, dentro dela que você pode inserir seus cálculos etc.
O exemplo que eu vou apresentar agora é uma forma de calcular fatoriais usando threads, como Python é uma linguagem filha do Haskell (linguagem funcional) o cálculo do fatorial mesmo usando um for é extremamente rápido. Por isso usamos a classe threading.Timer para ter uma demora maior como se estivesse calculando por mais tempo apenas para perceber o resultado final.
Após o for do fatorial temos a declaração da classe threading.Timer(), esta classe recebe dois parâmetros de entrada. O primeiro é o tempo que vai ser executada o segundo parâmetro é a função que deve ser executada depois desse tempo determinado. Como o nosso cálculo é feito dentro da run() foi criada uma função timef(self) sem execução para poder criar o objeto. Após a criação devemos chamar o método t.start() para iniciar a Thread de tempo. Mas, se você apenas mandar iniciar essa thread, sua classe irá finalizar e irá imprimir na tela o resultado e o tempo irá correr em paralelo. Para apresentar o resultado só quando o objeto t terminar o tempo devemos chamar o método t.join() onde irá continuar o código só quando essa Thread terminar. Após isso nosso método é finalizado.
Agora é só fazer uma chamada para essa classe e ver o resultado, segue um exemplo que eu fiz:
Executem este exemplo e boa sorte com as threads. Espero que tenham gostado!
Dentro do Python as funções de threads estão dentro de uma classe chamada threading.Threads, esta classe tem todas as funções necessárias para manutenção de threads dentro do Python, antes de utilizá-la você deve importar o modulo threading usando "import. threading", mas para podermos utilizá-la precisamos criar uma nova classe que irá herdar da classe threading.Threads da seguinte forma:
O exemplo que eu vou apresentar agora é uma forma de calcular fatoriais usando threads, como Python é uma linguagem filha do Haskell (linguagem funcional) o cálculo do fatorial mesmo usando um for é extremamente rápido. Por isso usamos a classe threading.Timer para ter uma demora maior como se estivesse calculando por mais tempo apenas para perceber o resultado final.
Código do programa
Neste código podemos ver que o construtor (__init__) recebe dois parâmetros, o parâmetro number é o valor que será calculado. O parâmetro time, que define quanto tempo essa thread vai demorar a retornar o valor. Após isso temos o método run(self), nele executamos o fatorial.Após o for do fatorial temos a declaração da classe threading.Timer(), esta classe recebe dois parâmetros de entrada. O primeiro é o tempo que vai ser executada o segundo parâmetro é a função que deve ser executada depois desse tempo determinado. Como o nosso cálculo é feito dentro da run() foi criada uma função timef(self) sem execução para poder criar o objeto. Após a criação devemos chamar o método t.start() para iniciar a Thread de tempo. Mas, se você apenas mandar iniciar essa thread, sua classe irá finalizar e irá imprimir na tela o resultado e o tempo irá correr em paralelo. Para apresentar o resultado só quando o objeto t terminar o tempo devemos chamar o método t.join() onde irá continuar o código só quando essa Thread terminar. Após isso nosso método é finalizado.
Agora é só fazer uma chamada para essa classe e ver o resultado, segue um exemplo que eu fiz: