[SP-pm] Dynamic Unload
Tiago Peczenyj
tiago.peczenyj at gmail.com
Fri Jul 26 06:23:00 PDT 2013
Fico curioso ao fazer isso com um modulo que tenha codigo nativo/XS
2013/7/26 Renato Santos <renato.cron at gmail.com>
> Hmm
>
> Se fosse uma aplicação tipo REST você poderia criar o processo com as
> novas mudanças e depois matar o processo desatualizado e passar o trabalho
> só pro novo.
>
> Isso não é exatamente um reload, mas é o mais seguro que se pode fazer
> Em 26/07/2013 09:11, "Blabos de Blebe" <blabos at gmail.com> escreveu:
>
>> Oi pessoal,
>>
>> Ultimamente eu tenho brincado com carregamento dinâmico e surgiu a
>> necessidade de fazer um "reload" de módulos que eu carreguei dinamicamente,
>> pois eu quero subir uma versão atualizada de um módulo sem reiniciar a
>> aplicação.
>>
>> Suponham o seguinte cenário de teste:
>>
>> while(<>) {
>> reload( 'Foo::Bar' );
>> say Foo::Bar::hello();
>> }
>>
>> Atualmente, eu uso um módulo que faz o load(), então para completar o
>> "reload" eu preciso fazer o "unload":
>>
>> sub reload {
>> my $module = shift;
>>
>> unload( $module );
>> load( $module );
>> }
>>
>> Para isso eu dei uma olhada no cpan e encontrei o módulo Class::Unload,
>> mas infelizmente o exemplo que ele tem na sinopse não funciona no meu
>> cenário.
>>
>> Pesquisando um pouco mais eu encontrei os seguinte código:
>>
>> sub unload {
>> my $module = shift;
>> my $filename = to_filename( $module );
>> delete $INC{ $filename };
>> }
>>
>> Esse código faz com que a cada passo do loop o módulo 'Foo::Bar' seja
>> carregado, e as alterações no seu fonte sejam visíveis na aplicação,
>> atingindo o meu objetivo.
>>
>> Entretanto, essa solução está me cheirando a gambiarra. Eu estou
>> preocupado com memory leaks e coisas do gênero, pois pretendo utilizar esse
>> "reload" em uma aplicação que teoricamente rodaria indefinidamente.
>>
>> Vocês poderiam apontar outros módulos que lidam com esse problema de
>> forma segura, ou documentação mais específica onde eu possa entender melhor
>> o processo?
>>
>> Mais do que uma solução para o meu cenário, eu estou procurando entender
>> melhor o processo.
>>
>> []'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
>>
>>
> =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
>
>
--
Tiago B. Peczenyj
Linux User #405772
http://about.me/peczenyj
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130726/af94d98e/attachment.html>
More information about the SaoPaulo-pm
mailing list