POE::Component::JobQueue->spawn ( Alias => 'MyQueue', WorkerLimit => 3, Worker => \&make_a_worker, Passive => { }, ); ### # Job Queue Items ### sub make_a_worker { my ( $postback, $message ) = @_; POE::Session->create( inline_states => { _start => \&start_message_process, process_message => \&process_message, delay_test => \&delay_test, _end => \&end_message_process, }, ); } sub enqueue_job { my ($kernel, $session, $job) = @_[ KERNEL, SESSION, ARG0 ]; print "-enqueue_job: -- Session: ", $session->ID, " message\n"; $kernel->post( MyQueue => 'enqueue', #'remove_message', 'test_msg', $job ); } sub got_message { my ($kernel, $session, $heap, $preargs, $postargs) = @_[KERNEL, SESSION, HEAP, ARG0, ARG1]; $kernel->yield( enqueue_job => $postargs->[0] ); return 1; }