Planned Features

This is a list of features that may be implemented in the future.

Reading commands from files

Commands can be read from files using xargs(1). However, xargs reads commands in chunks, so that para is called repeatedly for subsets of those commands, limiting parallelization.

For example,

$ for file in *.foo
> do printf '%s\0' "$file" "${file%.foo}.bar"
> done |
> para -0f- -k'mv {} {}'

would be more efficient than

$ for file in *.foo
> do printf '%s\0' "$file" "${file%.foo}.bar"
> done |
> xargs -0 -n256 para -k'mv {} {}'

Dependencies

Para could run pipelines in parallel, rather than commands. This would allow users to, say, to run foo and bar in parallel, but only run baz once, and if, bar has succeeded; for example:

$ para foo 'bar; baz'

Per-job environments and I/O streams

Jobs that lend themselves to parallelization tend to be similar. Still, it may be useful to be able to specify different environments and I/O redirections for different jobs, for example:

$ para 'find /foo -name '*bar*' >find.out' 'PYTHONPATH=/qux qux >qux.out'

The syntax should mimic that of the sh.

Calling commands via sh

Another way to implement dependencies and per-job environments and I/O streams would be to allow users to run commands via sh -c.