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

Thanks Salva,

I tried your module. It's easy to use indeed.
BTW how can we verify that they are actually running in parallel? I tried "top" but it only shows one instances.

Regards,
Edward
  • Comment on Re^2: How to Run Script for Multiple Files in Parallel?

Replies are listed 'Best First'.
Re^3: How to Run Script for Multiple Files in Parallel?
by salva (Canon) on Apr 18, 2005 at 16:32 UTC
    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 $@; };
      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.