AnyEvent-ForkManager
view release on metacpan or search on metacpan
lib/AnyEvent/ForkManager.pm view on Meta::CPAN
package AnyEvent::ForkManager;
use 5.008_001;
use strict;
use warnings;
our $VERSION = '0.07';
use AnyEvent;
use Scalar::Util qw/weaken/;
use POSIX qw/WNOHANG/;
use Time::HiRes ();
use Class::Accessor::Lite 0.04 (
ro => [
qw/max_workers manager_pid/,
],
rw => [
qw/on_start on_finish on_error on_enqueue on_dequeue on_working_max/,
qw/process_queue running_worker process_cb wait_async/,
lib/AnyEvent/ForkManager.pm view on Meta::CPAN
# child
$arg->{cb}->($self, @{ $arg->{args} });
$self->finish;
}
}
}
sub _create_callback {
my($self, @args) = @_;
weaken($self);
return sub {
my ($pid, $status) = @_;
delete $self->running_worker->{$pid};
delete $self->process_cb->{$pid};
$self->_run_cb('on_finish' => $pid, $status, @args);
if ($self->num_queues) {
## dequeue
$self->dequeue;
}
lib/AnyEvent/ForkManager.pm view on Meta::CPAN
my $cb = $arg->{cb};
if ($arg->{blocking}) {
$self->_wait_all_children_with_blocking;
$self->$cb;
}
else {
die 'cannot call.' if $self->wait_async;
my $super = $self->on_finish;
weaken($self);
$self->on_finish(
sub {
$super->(@_);
if ($self->num_workers == 0 and $self->num_queues == 0) {
$self->$cb;
$self->on_finish($super);
$self->wait_async(0);
}
}
);
( run in 0.680 second using v1.01-cache-2.11-cpan-65fba6d93b7 )