NAME
App::CLI::Plugin::Parallel::ForkManager - for App::CLI::Extension fork plugin module
VERSION
1.1
SYNOPSIS
# MyApp.pm
package MyApp;
use strict;
use base qw(App::CLI::Extension);
# extension method
__PACKAGE__->load_plugins(qw(Parallel::ForkManager));
# extension method
__PACKAGE__->config( parallel_fork_manager => 5 );
1;
# MyApp/Fork.pm
package MyApp::Fork;
use strict;
use base qw(App::CLI::Command);
use LWP::UserAgent;
use HTTP::Request;
our %LINKS = (cpan => "http://search.cpan.org", perl => "http://www.perl.org", foo => "http://foo.foo/");
sub options { return ("maxprocs=i" => "maxprocs") };
sub run {
my($self, @argv) = @_;
$self->pm->run_on_start(sub {
my ($pid, $ident) = @_;
print "$ident PID[$pid] start\n";
});
$self->pm->run_on_finish(sub {
my ($pid, $exit_value, $ident) = @_;
print "$ident PID[$pid] finish. exit_value: $exit_value\n";
});
foreach my $key (keys %LINKS) {
my $pid = $self->pm->start($key) and next;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $LINKS{$key});
my $res = $ua->request($req);
if ($res->is_success) {
printf "%s's status code: %d\n", $key, $res->code;
} else {
printf "ERROR: $key %s\n", $res->status_line;
}
$self->pm->finish;
}
$self->pm->wait_all_children;
}
1;
# myapp
#!/usr/bin/perl
use strict;
use MyApp;
MyApp->dispatch;
# execute
[kurt@localhost ~] ./myapp fork
perl PID[3193] start
cpan PID[3194] start
foo PID[3195] start
perl's status code: 200
perl PID[3193] finish. exit_value: 0
cpan's status code: 200
cpan PID[3194] finish. exit_value: 0
foo's status code: 200
cpan PID[3195] finish. exit_value: 0
DESCRIPTION
App::CLI::Plugin::Parallel::ForkManager - Parallel::ForkManager plugin module
pm method setting
__PACKAGE__->config( parallel_fork_manager => $maxprocs );
or if --maxprocs option is defined. it applies.
# in MyApp/**.pm
sub options {
return ( "maxprocs=i" => "maxprocs" ) ;
}
# execute
[kurt@localhost ~] ./myapp fork --maxprocs=10
METHOD
pm
return Parallel::ForkManager object.
AUTHOR
Akira Horimoto
SEE ALSO
App::CLI::Extension Parallel::ForkManager
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
COPYRIGHT
Copyright (C) 2010 Akira Horimoto