in reply to Re^2: How to Run Script for Multiple Files in Parallel?
in thread How to Run Script for Multiple Files in Parallel?

To see what is happening you can use Proc::Queue trace mode, just add to your script...
use Proc::Queue qw(run_back); Proc::Queue::trace(1);
Also, wrap the forked code inside an eval block and report errors:
run_back { eval { ... parallel code here ... }; print STDERR $0."[$$]: $@\n" if $@; };

Replies are listed 'Best First'.
Re^4: How to Run Script for Multiple Files in Parallel?
by monkfan (Curate) on Apr 18, 2005 at 16:46 UTC
    I tried this:
    use Proc::Queue size=>2, qw(run_back); Proc::Queue::trace(1); my @ARGV = ("file1.fasta","file2.fasta"); for ( @ARGV ) { run_back { eval{ run_code($_) }; print STDERR $0."[$$]: $@\n" if $@; } } 1 while wait != -1; run_code { my $file = shift; #do the rest }
    It gives this:
    Proc::Queue::run_back(CODE(0x824a9d0)) called at mycode_itr.pl line 37 Proc::Queue::fork called at mycode_itr.pl line 37 Proc::Queue::run_back(CODE(0x824a9d0)) called at mycode_itr.pl line 37 Proc::Queue::fork called at mycode_itr.pl line 37 Proc::Queue::wait called at mycode_itr.pl line 38
    Is it correct or is it an error message? If correct, what does it mean? However, now it does show 2 instances under "top".
    Regards,
    Edward
      yes, try also adding some debugging print statements in your run_code sub to see what's happening... at least one at the end telling that everything run fine.

      Proc::Queue has also a more verbose debug mode you can try as Proc::Queue::debug(1). It exposses a lot of the module internals, but it's not imposible to understand.