[SP-pm] Duvida em fluxo de controle com o AnyEvent
Solli Honorio
shonorio at gmail.com
Fri Feb 22 13:22:50 PST 2013
Estou com um sistema que abre vários stream no twitter e fica processando
cada retorno, para isto estou utilizando o AnyEvent::Twitter::Stream.
Uma versão simplificada do meu código é assim :
<code>
use common::sense;
use AnyEvent;
use AnyEvent::Twitter::Stream;
# Definição de variáveis globais
my %process
my %CONFIG = load_from_database_my_configuration();
my $done = AnyEvent->condvar;
for my $key ( keys %CONFIG ) {
$process{$key}{twitter} = create_twitter_stream( $key, $CONFIG{$key} );
}
# running
sub create_twitter_stream {
my ($key, $config) = @_;
# cria uma transação para este stream
$done->begin;
return AnyEvent::Twitter::Stream->new(
consumer_secret => $config->{consumer_secret},
consumer_key => $config->{consumer_key},
token => $config->{access_token},
token_secret => $config->{access_token_secret},
method => 'filter',
track => $config->{terms},
timeout => 60,
on_error => sub {
$done->end;
delete $process{$key};
# must do something to re-load this
stream
must_reload_this_stream($key);
},
on_tweet => sub { # do something },
on_keepalive => sub { # do something },
on_connect => sub { # do something },
);
}
sub must_reload_this_stream {
my $key = shift;
$process{$key}{twitter} = create_twitter_stream( $key, $CONFIG{$key} );
}
</code>
A minha dúvida é como reiniciar o stream que gerou o erro. Antes eu estava
desviando o fluxo através do $done->send($key), e depois pegava o valor
enviado pelo sendo em outro ponto. O problema é que o 'send' desvia todo o
processo do AE, inclusive de quem está trabalhando bem.
Então resolvi utilizar o begin/end, conforme sugestão do Stan. Como ficou
no exemplo acima, então eu apago a chave do hash referente ao evento.
Da maneira como estou fazendo tem risco de criar um memory leak ? Stan,
estou fazendo da maneira correta pensando em AE ?
Obrigado,
Solli Honorio
--
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130222/4fdacb68/attachment.html>
More information about the SaoPaulo-pm
mailing list