The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

SYNOPSIS

    package IncrementWorker;
    use base 'Gearman::Spawner::Worker';

    sub new {
        # copy these three lines of boilerplate into your subclass's new:
        my $self = shift;
        $self = fields::new($self) unless ref $self;
        $self->SUPER::new(@_);

        print "I am worker number $self->{slot}\n";
        print "My configuration is $self->{data}\n";

        # ... and these two, with your own methods:
        $self->register_method('increment');
        return $self;
    }

    sub increment {
        my MethodWorker $self = shift; # slot and data available here too
        my $arg = shift;
        return $arg + 1;
    }

DESCRIPTION

This is the base class for workers meant to be supervised by Gearman::Spawner. For correct operation, the ->new method of descendant classes must call the ->new method of this class with their @_.

Since this class is itself descended from the fields-derived Gearman::Worker, subclasses may declare additional object members using fields, e.g.,

    use fields qw( foo bar ); # $self->{foo} = 1;

Two object members are already available: $self->{slot} and $self->{data}. The data member is whatever was passed in the configuration for the worker in Gearman::Spawner->new. The slot is a sequential number (1-based) which identifies the worker within the set of those it was spawned with in its class.

METHODS

Gearman::Spawner::Worker->new($method_name, [$timeout])

Registers a method to be called via a Gearman::Spawner::Worker class. A Gearman function will be registered with the server with a name based on the method name. When the client module's run_method function is called, the argument will be passed to the registered method as its first non-$self argument.

If $timeout is provided, the Gearman server may attempt to retry the function if the job is not finished withint $timeout seconds.

The parameters to $method and its return value are marshalled by Storable.

$self->register_method($method_name, [$timeout])

Registers a method to be called via Gearman::Spawner::Worker. A Gearman function named $function_name will be registered with the server. When a client calls that function, the method named $method (may alternatively be a coderef) will be called with the Gearman::Spawner::Worker object as the first argument. $method defaults to be the same as $function_name if not provided.

If $timeout is provided, the Gearman server may attempt to retry the function if the job is not finished withint $timeout seconds.

The parameters to $method and return value (which should be a scalar) from it are marshalled by Storable.

$self->function_name($method)

Returns the name of the function with which the given method was registered with the gearmand. Generally the Gearman::Spawner::Client modules handle figuring this out from the class and method names on your behalf. If for some reason you require the name, use e.g.:

    My::Gearman::Worker->function_name('mymethod')