martes, 2 de febrero de 2016

Manual POE


El siguiente script arranca 10 sesiones POE, cada una contando hasta 10. Cuando terminan de contar imprimen un mensaje de finalización y el script termina.

#!/usr/bin/perl -w
use strict;

use POE;  # Auto-includes POE::Kernel and POE::Session.

sub handler_start {
  my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
  print "Session ", $session->ID, " has started.\n";
  $heap->{count} = 0;
  $kernel->yield('increment');
}

sub handler_increment {
  my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
  print "Session ", $session->ID, " counted to ", ++$heap->{count}, ".\n";
  $kernel->yield('increment') if $heap->{count} < 10;
}

sub handler_stop {
  print "Session ", $_[SESSION]->ID, " has stopped.\n";
}

for (1..10) {
  POE::Session->create(
    inline_states => {
      _start    => \&handler_start,
      increment => \&handler_increment,
      _stop     => \&handler_stop,
    }
  );
}

POE::Kernel->run();
exit;


POE es un framework en Perl para programación multitarea y de redes cooperativa y orientada a eventos. Otros lenguajes tienen frameworks similares, como Python tiene Twisted y TCL tiene "the event loop".
POE provee una interface unificada para varios bucles de eventos, incluyendo select(), IO::Poll, Glib, Gtk, Tk, Wx, y Gtk2.
POE logra un alto grado de portabilidad gracias a ser enteramente escrito en Perl. Pero hay módulos opcionales en XS si la velocidad es más deseable que la portabilidad.
POE está diseñado en capas. Cada capa se construye sobre las demás. Los scripts son libres de usar POE en cualquier nivel de abstracción y los diferentes niveles pueden mezclarse. Sin embargo las abstracciones de alto nivel requieren más recursos que las de bajo nivel.

No hay comentarios:

Publicar un comentario