packages feed

tpar-0.1.0.0: README.mkd

# tpar — simple parallel job scheduling

`tpar` is a simple tool for concurrent job scheduling. Say you have a
directory full of files which need processing,

```bash
$ ls
file1    file2     file3     file4    file5
...
```

Usually one could use a `bash` for loop,

```bash
$ for f in *; do process $f; done;
```

But if `process` is a long-running task and you have many cores at
your disposal, it would be nice to speed things up a bit,

```bash
$ tpar server -N8
$ for f in *; do tpar enqueue -- process $f; done;
```

If you have multiple machines with the data mounted over, say, NFS, they can
also help with churning through the queue,

```bash
$ for m in worker1 worker2 worker3; do
>   ssh $m -- tpar worker -H`hostname`;
> done
```

## Commands

`tpar` has several subcommands,

  * `tpar server` starts a local queue server.
  * `tpar worker` starts a worker associated with
    the given queue
  * `tpar enqueue -- $cmd` enqueues a job in the given queue
  * `tpar status` allows you to query for the status of the queue. You can also provide a job match expression 
  * `tpar kill` kills a running task (specified by a job match expression)
  * `tpar watch` is analogous `tail -f`, watching the output of a set of running tasks
  * `tpar dump` dumps a JSON representation of the queue state.

Nearly all of these commands will require that the `-H` option be provided
specifying the canonical hostname of the queue server (the machine running
`tpar server`).


## Job match expressions

Several `tpar` commands accept a *job match expression*, which specifies the
subset of jobs on which the command should act. For instance (note the quotes to
ensure that `bash` doesn't interpret our symbols),

```
$ tpar status '*'    # This is equivalent to `tpar status` run without an argument
$ tpar status id=2
$ tpar status state=running
$ tpar status 'name="my-job" or name="my-other-job"'
```

These expressions consist of the primitive matches,
 * `name="STRING"`, which matches on the job name provided in the `--name` of
   `tpar enqueue`.
 * `id=`, which matches on the job ID
 * `state=`, which matches on the current state of the job (`queued`, `running`,
   `finished`, `failed`, `killed`, or `code=N`)
 * `*`, which matches all jobs
 
These matches can be connected with the `and` and `or` operators, and inverted
with `!`.