AnyEve...Manager(3pm)

πŸ“¦
version 0.07 Β· 2 versions
  • 0.07 Β· debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking (latest)
  • 0.07 Β· ubuntu jammy
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

AnyEvent::ForkManager β€” a super cute, super simple parallel processing fork manager that runs on AnyEvent, bestie. It's giving multitasking but make it non-blocking. πŸ¦‹


✨ VERSION ✨

This doc is describing AnyEvent::ForkManager version 0.07. Yes, she's still a baby but she's an icon. πŸ‘‘


πŸŽ€ SYNOPSIS πŸŽ€

okay so here's the whole vibe, copy-paste ready:

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;

like, twenty sleeps, ten workers, zero blocking. main character energy fr fr. πŸ’…


🌸 DESCRIPTION 🌸

AnyEvent::ForkManager is basically Parallel::ForkManager's cooler cousin β€” same energy, but she supports a non-blocking interface with AnyEvent. ✨

Here's the tea: Parallel::ForkManager is useful, but honestly it's a struggle to use alongside AnyEvent. Why? because some of Parallel::ForkManager's methods are blocking the event loop of the AnyEvent. 😭 Not the move.

So you can accomplish the same goals without adversely affecting the Parallel::ForkManager to AnyEvent::ForkManager with AnyEvent. And the reason that works so well? Because AnyEvent::ForkManager's methods are non-blocking the event loop of the AnyEvent. no cap. 🫢


🧚 INTERFACE 🧚

Methods

πŸ’œ new

This is constructor. the origin story. the birth. 🐣

  • 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. go bestie go πŸƒβ™€οΈβœ¨

  • 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. She can wait with blocking or wait with non-blocking in event loop of AnyEvent. πŸ’«

⚠️ heads up bestie: the feature to wait with blocking is ALPHA quality till the version hits v1.0.0. Things might be broken. like, genuinely. not being dramatic. πŸ’€
  • 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. πŸ“£ everyone hear me out, simultaneously.


πŸ™ˆ 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. old school but she ate. πŸ’–


πŸ’€ 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. do NOT suffer in silence bestie, tell me.


🫢 SEE ALSO 🫢

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

the whole friend group, basically. iykyk. πŸ’œ


✨ AUTHOR ✨

Kenta Sato <karupa@cpan.org> 🌟


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.


and that's the whole page bestie πŸ’– β€” she was built on perl v5.34.0, dated 2022-07-04, and lives in the manpage as AnyEve...Manager(3pm). thanks for reading, now go fork something. πŸ¦‹πŸŒΈβœ¨

πŸ“¦ where this page comes from