Eu já li bastante sobre AnyEvent e ZMQ. Alguém já usou?
Marcelo Milhomem
is4Web Sistemas
Em 2013-09-19 15:41, Renato Santos escreveu:
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 [6] tem auto-reconnect, por
exemplo!
2013/9/19 Blabos de Blebe <[email protected]>
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 <[email protected]>
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 [1]
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 <[email protected]>
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/ [2]
SaoPaulo-pm mailing list: [email protected]
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm [3]>
=end disclaimer
--
Saravá,
Renato CRON
http://www.renatocron.com/blog/ [4]
@renato_cron [5]
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ [2]
SaoPaulo-pm mailing list: [email protected]
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm [3]>
=end disclaimer
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ [2]
SaoPaulo-pm mailing list: [email protected]
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm [3]>
=end disclaimer
--
Saravá,
Renato CRON
http://www.renatocron.com/blog/ [4]
@renato_cron [5]
Links:
------
[1] http://redis.io/commands/rpoplpush
[2] http://sao-paulo.pm.org/
[3] http://mail.pm.org/mailman/listinfo/saopaulo-pm
[4] http://www.renatocron.com/blog/
[5] http://twitter.com/#!/renato_cron
[6] https://metacpan.org/module/Redis
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
SaoPaulo-pm mailing list: [email protected]
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: [email protected]
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer