in reply to Building a thread pool

Does anyone have a working example of a (preferably OO) work crew style thread pool that I could use/rip off?

Here is an example using Tk Tk-with-worker-threads

It demonstrates a "sleeping thread pool". The script allows you to set how many to make ( set up as max= 3), then it keeps an array, which you shift and push, to keep track of available (free) workers. You can pass code to it, and get results thru shared variables. I just have it open and xterm, and when you close the xterm, a count starts. When the thread is finished or cancelled, it goes back to sleep, and is pushed back into the available-array. I have the sleep time as 1 second, but you can improve responsiveness by using a miliisecond value ( select(undef,undef,undef,.01). It will still use very little cpu when sleeping at that interval.

The sleeping thread loop is the essence of what you are after, in the sub "work". I used a goto in it, as a simple way of killing the thread , but you could use a "return" instead.

P.S. The reason I use Tk, is that it allows for an event-loop to monitor the thread's shared vars from main. This is your big problem. The main script will NOT see changes in shared vars, until it actively reads it. So you need a loop of somekind. Maybe POE, Event, or another option like Roll your own Event-loop


I'm not really a human, but I play one on earth. flash japh