Hi,
Background:
I have task of calculating dependencies of project(s) of a scenario. Dependency calculation is done using an external command. Since this dependency calculation time depends on how big is the project is, it is difficult to guess how much dependency calculation of a scenario(a set of projects) takes. To overcome this i am using 'threads' module to create thread and ask each thread to do the dependency calculation.

I have many scenarios currently and i calculate dependency foreach scenario. I create one thread for each project in the scenario and wait for all threads to finish, to take on next scenario. Because i know 'Perl ithreads are not lightweight!', i am using carefully, in the sense, I'm not using any shared variables between threads. Each thread will do dependency calculation, which will produces an output in a file separately. Later i parse those files to get dependency list for each project.

Problem:
Sometimes* the script waits forever or the script just hangs. That is waiting for threads. And cant continue with other scenario.

#this way i create threads
#foreach scenario() ...{
map {my $th = threads->create(\&worker, $_)} @$proj_arr; #proj_arr has projects of a scenario
# ...}

# This is how i wait for all threads to finish its job 
print "waiting for threads to finish";
map {my $k = $_->join} threads->list;

Is there a way i can overcome this? Or my perception about cause for the problem is right? Because from the log i see, only 'waiting for threads to finish' at last and script will continue. This is happens only sometimes. Most of the times the script executes fine.

Atleast i want to be informed about the 'script is not responding or hanged', because the script is scheduled there will be not be any clue unless and otherwise, myself has to go and check.

Hope i could explain the problem clearly. I am using 'perl, v5.8.8 built for MSWin32-x86-multi-thread'


Thanks in advance,
katharnakh.

This article has been dead for over six months. Start a new discussion instead.