[SP-pm] Jobs

Renato Santos renato.cron at gmail.com
Thu Sep 19 11:41:09 PDT 2013


Opa,

dá sim!

Vamos supor que você quer criar uma fila para processar imagens.

nos exemplos, usei Redis ou Redis::Client.

o processo seria algo como:

   - recebe a imagem, salva no disco compartilhado ou "cloud", insere no
   banco (para talvez mostrar para o usuario o status)
   - insere na fila dizendo algo como "PROCESSA IMAGEM ID 10"
   - $c->res->body("senta e reza, sua imagem vai ser processada (ou não)")
   and $c->deatch;

ai você precisa de um worker pra retirar da fila e processar a imagem,
salvar o status no banco, etc..

para o catalyst/qualquer lugar adicionar na fila, seria algo como:

$cliente_redis->rpush( $nome_da_fila => "json ou alguma coisa assim
contendo o id/caminho da imagem" );


e ai, em um 'worker' você teria o código assim:

while (my $item_da_fila = get_item  ){
 ...
}


sub get_item {

   my ( $list, $item )  = $cliente_redis->blpop( $nome_da_fila, 0 );

   if (defined $item) {
         return decode_json $item
    }else{
        # timeout, mas como ta 0, nunca devieria entrar aqui!
    }
}


Ai você ainda pode ter, por exemplo, 10 workers, ou 100, etc..


ps: Redis::Client não tem algumas coisas... o
https://metacpan.org/module/Redis tem auto-reconnect, por exemplo!



2013/9/19 Blabos de Blebe <blabos at gmail.com>

> O pé de coelho tá instalando o mundo aqui, mas como onde ele vai rodar já
> tem um mundo e meio instalado, não é problema
>
> Cron, não entendi a do redis. Dá pra desenhar? :)
>
>
> 2013/9/19 Renato Santos <renato.cron at gmail.com>
>
>> pera ai..
>>
>> você precisa só **dispatch**har um job e **detach**ar o processo do
>> catalyst para que ele possa receber outras conexões, certo?
>>
>> estranho esses modulos não estarem instalando,
>>
>> mas você pode utilizar então redis as queue,
>> http://redis.io/commands/rpoplpush
>>
>> assim você faz o catalyst colocar o job na fila, e alguem processa isso,
>> e 'algum dia' alguem olha o resultado.
>>
>> Redis é o mais leve, mas existem vários softwares* especializados
>> em queue. RabbitMQ, *por exemplo.
>>
>> Uma duvida: no 5.16 funciona? eu não fui pro 5.18 por que acho que
>> desnecessário por enquanto, por esses motivos (de modulos que podem
>> apresentar problemas "do nada")
>>
>>
>> 2013/9/19 Blabos de Blebe <blabos at gmail.com>
>>
>>> Pessoas,
>>>
>>> Estou querendo despachar alguns jobs para serem executados de forma
>>> assíncrona em relação à minha aplicação Catalyst. Eu preciso de
>>> sincronização zero. É só despachar e um dia olhar pro resultado.
>>>
>>> Dei uma olhada no carinha das engrenagens e no coelhinho, mas os módulos
>>> (Gearman e Net::RabbitMQ) não instalam no Perl 5.18.1.
>>>
>>> Vocês tem alguma sugestão alternativa? Outros módulos? Outras abordagens?
>>>
>>> Threads está descartado. Fork só se eu ficar muito rico com isso.
>>>
>>> []'s
>>>
>>> =begin disclaimer
>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>> =end disclaimer
>>>
>>>
>>
>>
>> --
>> Saravá,
>> Renato CRON
>> http://www.renatocron.com/blog/
>> @renato_cron <http://twitter.com/#!/renato_cron>
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron <http://twitter.com/#!/renato_cron>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130919/8c9c873b/attachment-0001.html>


More information about the SaoPaulo-pm mailing list