ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-Fork-Pool/Pool.pm
(Generate patch)

Comparing AnyEvent-Fork-Pool/Pool.pm (file contents):
Revision 1.9 by root, Thu Apr 25 00:27:22 2013 UTC vs.
Revision 1.13 by root, Sun Apr 28 14:27:31 2013 UTC

1=head1 NAME 1=head1 NAME
2 2
3AnyEvent::Fork::Pool - simple process pool manager on top of AnyEvent::Fork 3AnyEvent::Fork::Pool - simple process pool manager on top of AnyEvent::Fork
4
5THE API IS NOT FINISHED, CONSIDER THIS AN ALPHA RELEASE
6 4
7=head1 SYNOPSIS 5=head1 SYNOPSIS
8 6
9 use AnyEvent; 7 use AnyEvent;
10 use AnyEvent::Fork::Pool; 8 use AnyEvent::Fork::Pool;
43 41
44 $finish->recv; 42 $finish->recv;
45 43
46=head1 DESCRIPTION 44=head1 DESCRIPTION
47 45
48This module uses processes created via L<AnyEvent::Fork> and the RPC 46This module uses processes created via L<AnyEvent::Fork> (or
49protocol implement in L<AnyEvent::Fork::RPC> to create a load-balanced 47L<AnyEvent::Fork::Remote>) and the RPC protocol implement in
50pool of processes that handles jobs. 48L<AnyEvent::Fork::RPC> to create a load-balanced pool of processes that
49handles jobs.
51 50
52Understanding of L<AnyEvent::Fork> is helpful but not critical to be able 51Understanding of L<AnyEvent::Fork> is helpful but not critical to be able
53to use this module, but a thorough understanding of L<AnyEvent::Fork::RPC> 52to use this module, but a thorough understanding of L<AnyEvent::Fork::RPC>
54is, as it defines the actual API that needs to be implemented in the 53is, as it defines the actual API that needs to be implemented in the
55worker processes. 54worker processes.
56
57=head1 EXAMPLES
58 55
59=head1 PARENT USAGE 56=head1 PARENT USAGE
60 57
61To create a pool, you first have to create a L<AnyEvent::Fork> object - 58To create a pool, you first have to create a L<AnyEvent::Fork> object -
62this object becomes your template process. Whenever a new worker process 59this object becomes your template process. Whenever a new worker process
100# in the hope of not colliding. yes, I don't like it either, 97# in the hope of not colliding. yes, I don't like it either,
101# but didn't come up with an obviously better alternative. 98# but didn't come up with an obviously better alternative.
102my $magic0 = ':t6Z@HK1N%Dx@_7?=~-7NQgWDdAs6a,jFN=wLO0*jD*1%P'; 99my $magic0 = ':t6Z@HK1N%Dx@_7?=~-7NQgWDdAs6a,jFN=wLO0*jD*1%P';
103my $magic1 = '<~53rexz.U`!]X[A235^"fyEoiTF\T~oH1l/N6+Djep9b~bI9`\1x%B~vWO1q*'; 100my $magic1 = '<~53rexz.U`!]X[A235^"fyEoiTF\T~oH1l/N6+Djep9b~bI9`\1x%B~vWO1q*';
104 101
105our $VERSION = 0.1; 102our $VERSION = 1.1;
106 103
107=item my $pool = AnyEvent::Fork::Pool::run $fork, $function, [key => value...] 104=item my $pool = AnyEvent::Fork::Pool::run $fork, $function, [key => value...]
108 105
109The traditional way to call the pool creation function. But it is way 106The traditional way to call the pool creation function. But it is way
110cooler to call it in the following way: 107cooler to call it in the following way:
537deems this useful. For example, after executing a job, one could check 534deems this useful. For example, after executing a job, one could check
538the process size or the number of jobs handled so far, and if either is 535the process size or the number of jobs handled so far, and if either is
539too high, the worker could ask to get retired, to avoid memory leaks to 536too high, the worker could ask to get retired, to avoid memory leaks to
540accumulate. 537accumulate.
541 538
539Example: retire a worker after it has handled roughly 100 requests.
540
541 my $count = 0;
542
543 sub my::worker {
544
545 ++$count == 100
546 and AnyEvent::Fork::Pool::retire ();
547
548 ... normal code goes here
549 }
550
542=back 551=back
543 552
544=head1 POOL PARAMETERS RECIPES 553=head1 POOL PARAMETERS RECIPES
545 554
546This section describes some recipes for pool paramaters. These are mostly 555This section describes some recipes for pool paramaters. These are mostly
594 603
595=head1 SEE ALSO 604=head1 SEE ALSO
596 605
597L<AnyEvent::Fork>, to create the processes in the first place. 606L<AnyEvent::Fork>, to create the processes in the first place.
598 607
608L<AnyEvent::Fork::Remote>, likewise, but helpful for remote processes.
609
599L<AnyEvent::Fork::RPC>, which implements the RPC protocol and API. 610L<AnyEvent::Fork::RPC>, which implements the RPC protocol and API.
600 611
601=head1 AUTHOR AND CONTACT INFORMATION 612=head1 AUTHOR AND CONTACT INFORMATION
602 613
603 Marc Lehmann <schmorp@schmorp.de> 614 Marc Lehmann <schmorp@schmorp.de>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines