NAME
Proc::tored::Pool::Manager - OO interface to creating a managed worker pool service
VERSION
version 0.07
SYNOPSIS
use Proc::tored::Pool::Manager;
my $manager = Proc::tored::Pool::Manager->new(
name => 'thing-doer',
dir => '/var/run',
workers => 8,
on_assignment => sub {
my ($self, $id) = @_;
...
},
on_success => sub {
my ($self, $id, @results) = @_;
...
},
on_failure => sub {
my ($self, $id, $error) = @_;
...
},
);
# Submit tasks to the pool
$manager->service(sub {
my ($thing_id, $thing) = next_thing();
$manager->assign(sub { do_stuff_with($thing) }, $thing_id);
});
# Wait for all pending tasks to complete
$manager->sync;
DESCRIPTION
The Manager
is the object created "pool" in Proc::tored::Pool. It extends Proc::tored::Manager.
ATTRIBUTES
workers
Specifies the size of the pool of forked processes. Processes are forked as needed and used only once.
on_assignment
A code ref that is called when a task has been submitted to the worker pool. Receives the manager instance and the task id if submitted. to "assign".
on_success
A code ref that is triggered when a task's result has been collected. Receives the manager instance, the task id (if submitted), and any return value(s) from the submitted code block. If no values were returned from the code block, the results will be an empty list.
Proc::tored::Manager->new(
...
on_success => sub {
my ($me, $id, @results) = @_;
if (@results) {
...
}
},
);
If the code ref passed to "assign" performs an exec
, the results array will be replaced with zero-but-true when the worker process exits with a zero exit status. This is to (attempt to) avoid confusion in code where an assigned task may or may not exec
.
on_success => sub {
my ($me, $id, @results) = @_;
# Task exited cleanly but without a return value
if (@results == 1 && $results->[0]) {
...
}
}
on_failure
A code ref that is triggered when a task died during execution or exited abnormally. Receives the manager instance, the task id (if submitted), and the error message.
pending
Returns the number of tasks that have been submitted but whose results have not yet been collected.
assign
Submits a task (a CODE
ref) to the worker pool, optionally accepting a task id (something string-like).
sync
Blocks until all submitted tasks have completed and their results have been collected.
AUTHOR
Jeff Ober <jeffober@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Jeff Ober.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.