---
name: "AnyEvent::ForkManager"
section: "3pm"
platform: "linux"
package: "libanyevent-forkmanager-perl"
version: "0.07-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/AnyEvent::ForkManager"
---

# AnyEvent::ForkManager(3pm)

A simple parallel processing fork manager with AnyEvent

## NAME

AnyEvent::ForkManager - A simple parallel processing fork manager with AnyEvent

## VERSION

This document describes AnyEvent::ForkManager version 0.07.

## SYNOPSIS

```
    use AnyEvent;
    use AnyEvent::ForkManager;
    use List::Util qw/shuffle/;
    my $MAX_WORKERS = 10;
    my $pm = AnyEvent::ForkManager->new(max_workers => $MAX_WORKERS);
    $pm->on_start(sub {
        my($pm, $pid, $sec) = @_;
        printf "start sleep %2d sec.\n", $sec;
    });
    $pm->on_finish(sub {
        my($pm, $pid, $status, $sec) = @_;
        printf "end   sleep %2d sec.\n", $sec;
    });
    my @sleep_time = shuffle(1 .. 20);
    foreach my $sec (@sleep_time) {
        $pm->start(
            cb => sub {
                my($pm, $sec) = @_;
                sleep $sec;
            },
            args => [$sec]
        );
    }
    my $cv = AnyEvent->condvar;
    # wait with non-blocking
    $pm->wait_all_children(
        cb => sub {
            my($pm) = @_;
            print "end task!\n";
            $cv->send;
        },
    );
    $cv->recv;
```

## DESCRIPTION

`"AnyEvent::ForkManager"` is much like Parallel::ForkManager, but supports non-blocking interface with AnyEvent.

Parallel::ForkManager is useful but, it is difficult to use in conjunction with AnyEvent. Because Parallel::ForkManager's some methods are blocking the event loop of the AnyEvent.

You can accomplish the same goals without adversely affecting the Parallel::ForkManager to AnyEvent::ForkManager with AnyEvent. Because AnyEvent::ForkManager's methods are non-blocking the event loop of the AnyEvent.

## INTERFACE

### Methods

*"new"*

This is constructor.

- max\_workers

  max parallel forking count. (default: 10)

- on\_start

  started child process callback.

- on\_finish

  finished child process callback.

- on\_error

  fork error callback.

- on\_enqueue

  If push to start up child process queue, this callback is called.

- on\_dequeue

  If shift from start up child process queue, this callback is called.

- on\_working\_max

  If request to start up child process and process count equal max process count, this callback is called.

Example

```
  my $pm = AnyEvent::ForkManager->new(
      max_workers => 2,   ## default 10
      on_finish => sub {  ## optional
          my($pid, $status, @anyargs) = @_;
          ## this callback call when finished child process.(like AnyEvent->child)
      },
      on_error => sub {   ## optional
          my($pm, @anyargs) = @_;
          ## this callback call when fork failed.
      },
  );
```

*"start"*

start child process.

- args

  arguments passed to the callback function of the child process.

- cb

  run on child process callback.

Example

```
  $pm->start(
      cb => sub {   ## optional
          my($pm, $job_id) = @_;
          ## this callback call in child process.
      },
      args => [$job_id],## this arguments passed to the callback function
  );
```

*"wait\_all\_children"*

You can call this method to wait for all the processes which have been forked. This can wait with blocking or wait with non-blocking in event loop of AnyEvent. **feature to wait with blocking is ALPHA quality till the version hits v1.0.0. Things might be broken.**

- blocking

  If this parameter is true, blocking wait enable. (default: false) **feature to wait with blocking is ALPHA quality till the version hits v1.0.0. Things might be broken.**

- cb

  finished all the processes callback.

Example

```
  $pm->wait_all_children(
      cb => sub {   ## optional
          my($pm) = @_;
          ## this callback call when finished all child process.
      },
  );
```

*"signal\_all\_children"*

Sends signal to all worker processes. Only usable from manager process.

*"on\_error"*

As a new method's argument.

*"on\_start"*

As a new method's argument.

*"on\_finish"*

As a new method's argument.

*"on\_enqueue"*

As a new method's argument.

*"on\_dequeue"*

As a new method's argument.

*"on\_working\_max"*

As a new method's argument.

## DEPENDENCIES

Perl 5.8.1 or later.

## BUGS

All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT.

## SEE ALSO

AnyEvent AnyEvent::Util Parallel::ForkManager Parallel::Prefork

## AUTHOR

Kenta Sato \<karupa@cpan.org\>

## LICENSE AND COPYRIGHT

Copyright (c) 2012, Kenta Sato. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
