POE-Wheel-Spawner
view release on metacpan or search on metacpan
lib/POE/Wheel/Spawner.pm view on Meta::CPAN
=head2 spawn($pid)
request to spawn
=cut
sub spawn {
my ($self, $pid) = @_;
my $filter = POE::Filter::Reference->new();
my $output = $filter->put([{ busy_worker_pid => $pid }]);
print @$output;
} ## end sub spawn
#=head2 _handle_start
#
#handle C<_start> and C<_next> events defined in POE::Session, which is initialized in C<run>.
#
#start execution of C<workload> by C<pool_size> parallel running pids
#
lib/POE/Wheel/Spawner.pm view on Meta::CPAN
StderrEvent => "_stderr",
CloseEvent => "_done",
);
$heap->{worker_by_pid}->{ $w->PID } = $w;
$kernel->sig_child($w->PID, "_sig_child");
} ## end sub _handle_start
#=head2 _handle_sig_child
#
#Clear heap. Trigger '_next' if !stop_if_done and currently no child is busy
#
#=cut
sub _handle_sig_child {
my ($self, $kernel, $heap, $pid, $exit_val)
= @_[OBJECT, KERNEL, HEAP, ARG1, ARG2];
++$self->{_workers_sig_count};
my $child = delete $heap->{worker_by_pid}{$pid};
unless ($child) {
POE::Kernel::_die("no child pid: $pid");
}
delete $heap->{busy_worker_pid}->{$pid};
if ($self->{stop_if_done}) {
($self->{_workers_sig_count} >= $self->{pool_size}) && return;
}
else {
(scalar(keys(%{ $heap->{busy_worker_pid} })))
|| $kernel->yield("_next");
}
} ## end sub _handle_sig_child
#=head2 _handle_done
#
#is not implemented yet
#
#=cut
lib/POE/Wheel/Spawner.pm view on Meta::CPAN
sub _handle_stderr {
my ($self, $input, $wheel_id) = @_[OBJECT, ARG0, ARG1];
POE::Kernel::_warn("wheel $wheel_id STDERR: $input");
}
#=head2 _handle_stdout
#
#evaluate from child to stdout printed result.
#
#trigger _next event if child asks - by using busy_worker_pid printed to stdout - for a sibling
#
#=cut
sub _handle_stdout {
my ($self, $kernel, $heap, $result) = @_[OBJECT, KERNEL, HEAP, ARG0];
if (ref($result) eq 'HASH' && $result->{busy_worker_pid}) {
$heap->{busy_worker_pid}->{ $result->{busy_worker_pid} } = 1;
$kernel->yield("_next");
}
} ## end sub _handle_stdout
1; # End of POE::Wheel::Spawner
=head1 AUTHOR
Alexei Pastuchov E<lt>palik at cpan.orgE<gt>.
( run in 0.280 second using v1.01-cache-2.11-cpan-87723dcf8b7 )