A simple thread-pool implementation
use Thread::Pool::Simple; my $pool = Thread::Pool::Simple->new( min => 3, # at least 3 workers max => 5, # at most 5 workers load => 10, # increase worker if on average every worker has 10 jobs waiting init => [\&init_handle, $arg1, $arg2, ...] # run before creating worker thread pre => [\&pre_handle, $arg1, $arg2, ...] # run after creating worker thread do => [\&do_handle, $arg1, $arg2, ...] # job handler for each worker post => [\&post_handle, $arg1, $arg2, ...] # run before worker threads end passid => 1, # whether to pass the job id as the first argument to the &do_handle lifespan => 10000, # total jobs handled by each worker ); my ($id1) = $pool->add(@arg1); # call in list context my $id2 = $pool->add(@arg2); # call in scalar conetxt $pool->add(@arg3) # call in void context my @ret = $pool->remove($id1); # get result (block) my $ret = $pool->remove_nb($id2); # get result (no block) $pool->cancel($id1); # cancel the job $pool->cancel_all(); # cancel all jobs $pool->join(); # wait till all jobs are done $pool->detach(); # don't wait.
\*(C`Thread::Pool::Simple\*(C' provides a simple thread-pool implementaion without external dependencies outside core modules.
Jobs can be submitted to and handled by multi-threaded `workers' managed by the pool.
Jianyuan Wu, <[email protected]>
Copyright 2007 by Jianyuan Wu
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.