# NAME

Parallel::Tiny

# DESCRIPTION

Provides a simple, no frills fork manager.

# SYNOPSIS

Given an object that provides a `run()` method, you can create a `Parallel::Tiny` fork manager object that will execute that method several times.

    my $obj = My::Handler->new();
    my $forker = Parallel::Tiny->new(
        handler      => $obj,
        workers      => 4,
        worker_total => 32,
    );
    $forker->run();

In the above example we will execute the `run()` method for a `My::Handler` object 4 workers at a time, until 32 total workers have completed/died.

# METHODS

- new()

    Returns a new `Parallel::Tiny` fork manager.

    Takes the following arguments as a hash or hashref:

        {
            handler      => $handler,      # provide an object with a run() method, this will be your worker (required)
            reap_timeout => $reap_timeout, # how long to wait in between reaping children                    (default ".1")
            subname      => $subname,      # a method name to execute for the $handler                       (default "run")
            workers      => $workers,      # the number of workers that can run simultaneously               (default 1)
            worker_total => $worker_total, # the total number of times to run before stopping                (default 1)
        }

    For instance, you could run 100 workers, 4 workers at a time:

        my $forker = Parallel::Tiny->new(
            handler      => $obj,
            workers      => 4,
            worker_total => 100,
        );

    `infinite` can be provided for the `$worker_total` but you will need to manage stopping the fork manager elsewhere.

    If the parent is sent `SIGTERM` it will wait to reap all currently executing children before finishing.

    If the parent is killed, children will receive `SIGHUP`, which you will need to deal with in your `$handler`.

- run()

    Start running a number of parallel workers equal to `$workers`, until a number of workers equal to `$worker_total` have been completed.