<div dir="ltr"><div><br></div><div style>Estou com um sistema que abre vários stream no twitter e fica processando cada retorno, para isto estou utilizando o AnyEvent::Twitter::Stream.</div><div style><br></div><div style>

Uma versão simplificada do meu código é assim :</div><div style><br></div><div style><code></div><div style><div><font face="courier new, monospace">  use common::sense;</font></div><div><div><font face="courier new, monospace">  use AnyEvent;</font></div>

</div><div><div><span style="font-family:'courier new',monospace"> </span><span style="font-family:'courier new',monospace"> </span><font face="courier new, monospace">use AnyEvent::Twitter::Stream;</font></div>

</div><div><font face="courier new, monospace"><br></font></div><div style><span style="font-family:'courier new',monospace"> </span><span style="font-family:'courier new',monospace"> </span><font face="courier new, monospace"># Definição de variáveis globais</font></div>

<div style><span style="font-family:'courier new',monospace"> </span><span style="font-family:'courier new',monospace"> </span><font face="courier new, monospace">my %process</font></div><div style><span style="font-family:'courier new',monospace"> </span><span style="font-family:'courier new',monospace"> </span><font face="courier new, monospace">my %CONFIG = load_from_database_my_configuration();</font></div>

<div style><font face="courier new, monospace"><br></font></div><div style><span style="font-family:'courier new',monospace"> </span><span style="font-family:'courier new',monospace"> </span><font face="courier new, monospace">my $done = AnyEvent->condvar;<br>

</font></div><div style><div><font face="courier new, monospace"><br></font></div><div><span style="font-family:'courier new',monospace"> </span><span style="font-family:'courier new',monospace"> </span><font face="courier new, monospace">for my $key ( keys %CONFIG ) {</font></div>

<div><font face="courier new, monospace">    $process{$key}{twitter} = create_twitter_stream( $key, $CONFIG{$key} );</font></div><div><span style="font-family:'courier new',monospace"> </span><span style="font-family:'courier new',monospace"> </span><font face="courier new, monospace">}</font></div>

<div><font face="courier new, monospace"><br></font></div><div style><span style="font-family:'courier new',monospace">  # running</span><font face="courier new, monospace"><br></font></div><div style><br></div><div>

<font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"><div>  sub create_twitter_stream {</div><div>    my ($key, $config) = @_;</div><div><br></div><div>    # cria uma transação para este stream</div>

<div>    $done->begin;</div><div><br></div><div>    return AnyEvent::Twitter::Stream->new(</div><div>            consumer_secret => $config->{consumer_secret},</div><div>            consumer_key    => $config->{consumer_key},</div>

<div>            token           => $config->{access_token},</div><div>            token_secret    => $config->{access_token_secret},</div><div>            method          => 'filter',</div><div>            track           => $config->{terms},</div>

<div>            timeout         => 60,</div><div>            on_error        => sub {</div><div>                                    $done->end;<br></div><div>                                    delete $process{$key};</div>

<div>                                    # must do something to re-load this stream</div><div style>                                    must_reload_this_stream($key);<br></div></font><font face="courier new, monospace"><div>

                                                                        },</div><div>            on_tweet        => sub { # do something },</div><div>            on_keepalive    => sub { # do something },</div><div>

            on_connect      => sub { # do something },</div></font><font face="courier new, monospace"><div>    );</div></font><font face="courier new, monospace"><div>  }</div><div><br></div><div style>  sub must_reload_this_stream {</div>

<div style>    my $key = shift;</div><div style><br></div><div style>    $process{$key}{twitter} = create_twitter_stream( $key, $CONFIG{$key} );</div></font><font face="courier new, monospace"><div style>  }</div></font></div>

</div></div><div style></code></div><div><br></div>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.<div>

<br></div><div>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.</div><div><br></div><div>Da maneira como estou fazendo tem risco de criar um memory leak ? Stan, estou fazendo da maneira correta pensando em AE ?</div>

<div><br></div><div>Obrigado,</div><div><br></div><div>Solli Honorio<br clear="all"><div><br></div>-- <br>"o animal satisfeito dorme". - Guimarães Rosa
</div></div>