[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