NAME¶
Gearman::Worker - Worker for gearman distributed job system
SYNOPSIS¶
use Gearman::Worker;
my $worker = Gearman::Worker->new;
$worker->job_servers('127.0.0.1');
$worker->register_function($funcname => $subref);
$worker->work while 1;
DESCRIPTION¶
Gearman::Worker is a worker class for the Gearman distributed job system,
providing a framework for receiving and serving jobs from a Gearman server.
Callers instantiate a
Gearman::Worker object, register a list of
functions and capabilities that they can handle, then enter an event loop,
waiting for the server to send jobs.
The worker can send a return value back to the server, which then gets sent back
to the client that requested the job; or it can simply execute silently.
USAGE¶
Gearman::Worker->new(%options)¶
Creates a new
Gearman::Worker object, and returns the object.
If
%options is provided, initializes the new worker object
with the settings in
%options, which can contain:
- •
- job_servers
Calls job_servers (see below) to initialize the list of job servers.
It will be ignored if this worker is running as a child process of a
gearman server.
- •
- prefix
Calls prefix (see below) to set the prefix / namespace.
$worker->job_servers(@servers)¶
Initializes the worker
$worker with the list of job servers
in
@servers.
@servers should contain
a list of IP addresses, with optional port numbers. For example:
$worker->job_servers('127.0.0.1', '192.168.1.100:7003');
If the port number is not provided, 7003 is used as the default.
Calling this method will do nothing in a worker that is running as a child
process of a gearman server.
$worker->register_function($funcname, $subref)¶
$worker->register_function($funcname, $timeout, $subref)¶
Registers the function
$funcname as being provided by the
worker
$worker, and advertises these capabilities to all
of the job servers defined in this worker.
$subref must be a subroutine reference that will be invoked
when the worker receives a request for this function. It will be passed a
Gearman::Job object representing the job that has been received by the
worker.
$timeout is an optional parameter specifying how long the
jobserver will wait for your subroutine to give an answer. Exceeding this time
will result in the jobserver reassigning the task and ignoring your result.
This prevents a gimpy worker from ruining the 'user experience' in many
situations.
The subroutine reference can return a return value, which will be sent back to
the job server.
$client->prefix($prefix)¶
Sets the namespace / prefix for the function names. This is useful for sharing
job servers between different applications or different instances of the same
application (different development sandboxes for example).
The namespace is currently implemented as a simple tab separated concatentation
of the prefix and the function name.
Gearman::Job->arg¶
Returns the scalar argument that the client sent to the job server.
Gearman::Job->set_status($numerator, $denominator)¶
Updates the status of the job (most likely, a long-running job) and sends it
back to the job server.
$numerator and
$denominator should represent the percentage completion
of the job.
Gearman::Job->work(%opts)¶
Do one job and returns (no value returned). You can pass "on_start"
"on_complete" and "on_fail" callbacks in
%opts .
WORKERS AS CHILD PROCESSES¶
Gearman workers can be run run as child processes of a parent process which
embeds Gearman::Server. When such a parent process fork/execs a worker, it
sets the environment variable GEARMAN_WORKER_USE_STDIO to true before
launching the worker. If this variable is set to true, then the jobservers
function and option for
new() are ignored and the unix socket bound to
STDIN/OUT are used instead as the IO path to the gearman server.
EXAMPLES¶
Summation¶
This is an example worker that receives a request to sum up a list of integers.
use Gearman::Worker;
use Storable qw( thaw );
use List::Util qw( sum );
my $worker = Gearman::Worker->new;
$worker->job_servers('127.0.0.1');
$worker->register_function(sum => sub { sum @{ thaw($_[0]->arg) } });
$worker->work while 1;
See the
Gearman::Client documentation for a sample client sending the
sum job.