I modified parsort locally to support -jN, -j N, and check the PARALLEL environment for -jN or -j N. The -j option is working for processing STDIN via (sort_stdin) and input as files via (sort_files). Note: The -j option must be the first option to parsort.
--- parsort 2023-01-23 18:18:11.995898238 -0600
+++ parsort.new 2023-02-10 21:24:25.894632414 -0600
@@ -86,6 +86,17 @@
Getopt::Long::Configure("bundling","require_order");
my @ARGV_before = @ARGV;
+my $NJOBS;
+
+if($ARGV[0] eq "-j") {
+ shift, $NJOBS = shift, shift @ARGV_before for 1..2;
+ $ENV{PARALLEL} = "-j $NJOBS";
+} elsif($ARGV[0] =~ /-j(\d+)/) {
+ shift, $NJOBS = $1, shift @ARGV_before;
+ $ENV{PARALLEL} = "-j $NJOBS";
+} elsif($ENV{PARALLEL} =~ /-j\s*(\d+)/) {
+ $NJOBS = $1;
+}
GetOptions(
"debug|D" => \$opt::D,
@@ -175,7 +186,7 @@
# Input is stdin
# Spread the input between n processes that each sort
# n = number of CPU threads
- my $numthreads = `parallel --number-of-threads`;
+ my $numthreads = defined($NJOBS) ? $NJOBS : `parallel --number-of-threads`;
my @fifos = map { tmpfifo() } 1..$numthreads;
map { mkfifo($_,0600) } @fifos;
# This trick removes the fifo as soon as it is connected in the other end
I very much like parsort now regarding -j consistency with parallel (including PARALLEL env). There are possibly more reasons to have -j. For example, imagine an enterprise environment connected to SAN storage. Oftentimes, the SAN storage server results in a bottleneck. ++ for the -j option to parsort.
Please feel free to reject my change above. I tried to follow the format of the code with no spaces between if( and paren.