Hello,

Consider my code below would like to execute the sleep() function in
parallel, using POE JobQueue component:


#=============
use strict;
use POE qw(Component::JobQueue);

# Passive queue waits for enqueue events.
POE::Component::JobQueue->spawn(
        Alias       => 'passive',
        WorkerLimit => 16,
        Worker      => \&spawn_a_worker,
        Passive => {
                Prioritizer => sub { 1 }
        }
);

sub spawn_a_worker {
        my ( $postback, @job_params ) = @_;
        POE::Session->create(
                inline_states => {
                        _start => \&start,
                        sleep  => \&sleep
                },
                args => [
                        $postback,
                        @job_params,
                ],
        );
}

POE::Session->create(
        inline_states => {
                _start => \&init,
                _stop  => sub { print "END" }
        }
);
POE::Kernel->run();
exit(0);

sub init {
        my $kernel = $_[KERNEL];

        foreach ( 1 .. 10 ) {
                $kernel->post( passive => enqueue => response => $_ );
        }
}

sub start {
        my $kernel = $_[ KERNEL ];
        print "Starting\n";
        $kernel->yield("sleep");        
}

sub sleep {
        print "Sleeping for 5 seconds\n";
        sleep 5;
}

#==========

It seems that tasks still block each other? If not, I would have all
message executed at the end of 5 seconds.

Reply via email to