On Feb 26, 2010, at 10:34 PM, Eric Veith1 wrote:

> Dear list,
> 
> I'm wrinting a perl program that works with different threads.

Your first sentence already has me worried. Threads are un-fun. 

> Those 
> threads depend on each other, not all in the same way. Some threads should 
> stop when others are finished with their work, and again others are to be 
> started afterwards.

Now getting really complex.

> I have six worker machines, M1 to M6, and a controller machine, M0. The 
> perl program runs on the controller machine. This program is basically a 
> dispatcher I control from a command line interface. A command causes two 
> threads to be started, say on M1 and M2.

At this point, these are really processes. Threads are in the kernel, you are 
just starting a separate process on two different machines.

> One thread on M1 produces work, 
> the other on M2 plots the network traffic. When M1 is finished, I want the 
> thread M0 that caused the workload to signal to the dispatcher that M1 is 
> finished. The dispatcher then shall signal M2 to stop monitoring. 
> Afterwards, I want the results from both M1 and M2, preferably in form of 
> a perl structure.

These are all separate processes, not threads. Are you sure you need to use 
threads? In general a thread is something that runs _inside_ a process. 
http://en.wikipedia.org/wiki/Thread_(computer_science)

> First of all, is that possible?

Yes. Not that hard. You have exit values from your process so you can trap that 
and do something based on your exit value.
> 
> I have already looked at threads, threads::shared and the traditional 
> fork(). With the standard IPC stuff, I'm able to signal and trap that in 
> the master process with a signal handler. But I cannot, however, get the 
> PID of the child that emitted the signal, thus I'm not able to send a 
> SIGTERM to another process. I'm also not sure how I could get my result 
> data.

Well, why not just create something in a perl structure and just use something 
like the Storable module or YAML to dump it to disk and you can read it from 
your other machine.
> 
> threads::shared allows me to share a perl structure I could fill, but I 
> don't know how to signal the master thread. Passing a subroutine reference 
> doesn't work, of other options I don't know.
> 
> I'd very much appreciate any hints.

I would avoid threads. I would have a program / process on machine 0 that fires 
off another program / process on machine 1. Then I guess you need to fire off 
your program on machine 2 to do network monitoring (?). When the program on 1 
is finished, it dumps its data to disk and call machine 0 who in turn calls 2.

Jeremiah



--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to