Ir para o conteúdo
ou

Software livre Brasil

 Voltar a Porão do Tri...
Tela cheia

Executando tarefas em segundo plano usando PHP (Background Tasks – Threads)

20 de Dezembro de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 4544 vezes

Ola!

Hoje vamos falar um pouco sobre threads, segundo o Google Translate http://translate.google.com.br/translate_t?hl=&ie=UTF-8&text=thread&sl=en&tl=pt# threads são fios, no caso, múltiplos fios que passam para formar um feixe, esse feixe seria nosso programa, enquanto cada fio (thread) seria uma tarefa. Todas as tarefas trabalhando simultaneamente, resultando em nossa aplicação.

Muitos se perguntam se é possível a utilização de threads em PHP.

De forma nativa o PHP não suporta threads, mas existem alternativas bem simples que simulam múltiplas tarefas.

Nosso objetivo nesse material é executar tarefas em segundo plano, de forma que o usuário não precise aguardar um processamento demorado.

Temos um caso real onde foi implementada essa funcionalidade, ao gerar um recibo de empréstimo do sistema Gnuteca 3, existe a opção de enviar o recibo por email (além da impressão no balcão), mas normalmente o envio de email é uma tarefa demorada (ao menos neste caso), então agendamos o seu envio para o próximo momento, para segundo plano, ele será executado na sequência, mas o operador não precisará aguardar o seu envio, dessa forma agilizamos muito o processo de circulação de material.

Abaixo, segue uma implementação simples, de uma tarefa em segundo plano, porém funcional.

PrimeiroPlano.php

<?php
echo "Operação em primeiro plano</br>";
exe c( "php segundoPlano.php > /tmp/segundoPlanoIndex.txt &");
?>

A mágica consiste em mandarmos o resultado para o /tmp ( que pode ser outro caminho ) e adicionarmos o & (e comercial), isto faz que o php não fique aguardando o resultado do script.

Facilmente poderemos ler o arquivo no tmp para verificar se a tarefa foi executada corretamente, caso não, podemos executá-la novamente.

Para compatibilidade windows e linux, no site do php é recomenda a seguinte forma:

function execInBackground($cmd)
{
    if (substr(php_uname(), 0, 7) == "Windows")
    {
        pclos e(pope n("start /B ". $cmd, "r"));
    }
    else
    {
        exe c($cmd . " > /dev/null &");
    }
 }

Então em segundo plano, executamos nossas tarefas demoradas . No caso abaixo um exemplo simples com um for demorado.

Aqui se encontra o script que será executado em segundo plano:

segundoPlano.php

<?php
echo "tarefas em segundo plano\n";
for ($i=0; $i <50; $i++)
{
    echo "operação $i\n";
    sleep(1);
}
?>

Com isso já podemos executar nossas tarefas em segundo plano, possibilitando assim uma grande velocidade em nossas aplicações web.

Este material está longe de cobrir todos os casos ou possibilidades, mas é um inicio para quem quer estudar execução de tarefas em segundo plano em php.

Isto, em conjunto com a tecnologias ajax pode possibilitar grandes funcionalidades e recursos para resolução de tarefas complexas, mas ainda assim não é threads, e isso é fato.


Fonte: http://trialforce.nostaljia.eng.br/?p=716

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.