Skip to main content

A simple tool to launch multiple processes

Project description

pyrla

pyrla makes it easy to launch parallel processes that execute different commands. Its most common use case is having to run the same command in different directories ordered in a specific hierarchy (e.g. Temperature_T/Pressure_P, for several values of P and T). Perhaps the command should be invoked with folder-specific parameters. pyrla makes it easier to automatise this type of repetitive operations without having to resort to bash scripts or similar means. With pyrla, you can choose the number of contemporary jobs and their working path, which can be automatically generated. If the command you want to execute takes an input file as an argument (or if you want to have a bespoke file in each job's current directory), such an input file can be written on the fly or generated from an existent input file.

Usage

pyrla expects a single input file (see Input file syntax). It also supports the following options:

-d, --debug 
	enable debug (verbose) mode. Useful for developers
--ends-after n
	run the first n jobs only
-h, --help
	show a usage message
--max-states n
	set the maximum number of states (jobs) that can be generated. Defaults to 100000
-r, --dry-run
	show a complete summary of the jobs that will run. Useful for testing input files
-S, --summarise
	show a synthetic summary of the run
-s, --safe
	enable safe mode. No file or directory will be overwritten
--start-from n
	start jobs having an id >= n
-v, --version
	show the version of the program
-w, --wait n
	wait n seconds before starting the jobs (after the parsing of the input file)

Examples

The pyrla/examples/ folder contains commented pyrla input files that can be used as starting points to build your own.

Input file syntax

  • Empty lines or lines starting with a hash sign (#) will not be considered. A well-formed line should look like 'key = value'. Spaces before and after key and value are stripped off.

  • Any text coming after a hash sign (#) will be discarded.

  • About the 'value' syntax:

    • in general if your value contains spaces then it will be considered as a 'special' value (a mathematical expression or a list of values, for examples). If you want to avoid this you have to put double quotes (") around the whole value.
    • you can refer to other values by using the syntax $(key). The value of 'key' will be expanded at runtime. An example would be T_$(T).
    • you can use mathematical expressions but you have to put them between ${ and }. An example would be ${2 + 3}. You can also use complex functions (as long as they are defined in python's math module). An example would be ${log($(T)) + 0.2}.
    • you can load a list of values from a file by using the syntax key = LF filename. Each row will be treated as an item of the list.
    • you can use complex sequences in a way similar to bash's seq or python's range but in a more flexible way. The actual syntax is: F start T target V inc. Of course start is the starting value while target is the final value (excluded from the sequence, like in C-style for loops) and inc is the action to be performed on start to go towards target. A simple example would be T = F 0.1 T 0.4 V +0.1 which is equivalent T = 0.1 0.2 0.3. You can also have more complex sequences like T = F 0.1 T 100 V \*10, which is equivalent to T = 0.1 1 10.
    • you can evaluate a bash command and assign its value to a pyrla variable by enclosing the command between $b{ and }. For example, a = $b{echo "prova"} would assign the value 'prova' to the key 'a'
  • There are some special keys used as 'keywords'. These are:

    • DirectoryStructure: structure of the directory where the Execute command should be executed. It can depend on other variables (for example one can have DirectoryStructure = T_$(T)_Act_$(Activity)).
    • CopyFrom: path (absolute or relative to the pyrla script launching directory) to the base configuration file to be changed. This key may not contain expressions or list of values.
    • CopyTo: name of the base configuration whose keys will be taken from InputFrom (and modified using the InputFromOverwrite). This file will be copied to the directory given by DirectoryStructure. If this key is missing then the file will have the same name as the CopyFrom
    • CopyToWrite: name of the keys that should be written in the CopyTo file (if a CopyFrom is specified and it contains any of these keys they will be overwritten).
    • CopyObjects: one or more paths (absolute or relative to the pyrla script launching directory) to be copied under each job's working directory.
    • Execute: the command to execute.
    • PreExecute: a command to be executed before Execute. If the command exits with a non-zero exit code no other command will be run.
    • PostExecute: a command that will be executed after Execute if and only if Execute exits with a zero exit code.
    • Relaunch: if True relaunch jobs that return non-zero exit codes. Note that only the Execute command gets re-launched.
    • ContemporaryJobs: maximum number of jobs to be executed together. This key may not contain expressions or list of values. If 0 then no max will be set. Defaults to 0.
    • WaitingTime: waiting time (in seconds) between job launches. Defaults to 2 seconds.
    • Subdirectories: one or more directories (separated by spaces) to be created from each job under the DirectoryStructure folder. An example: Subdirectories = confs sus/special will create two folders under the job's working directory (determined by `DirectoryStructure``): confs and sus. In addition, a directory called "special" under the sus folder will be created.
    • Times: how many times the jobs must be executed.
    • InputSeparator: a character or a string which is used to separate keys from values in the input file (the CopyFrom one). Default is the equal sign '='.
    • Exclusive: if True, no more than one job per directory can be executed.
  • The following built-in keys can be used in user-defined keys:

    • JOB_ID: expands to the current job's id, which is 0 for the first job, 1 for the second, etc.
    • BASE_DIR: the directory pyrla was launched from.
  • It is possible to have keys take specific values when one or more conditions are met. For example, Delta = 0.2 @@ T = 0.1, Activity = 1e-5 will assign to Delta the value 0.2 for all those processes that have the two keys T and Activity take the values 0.1 and 1e-5, respectively. As of now, the only conditions available are comma-separated lists of specific values of keys.

Syntax of the CopyFrom file

pyrla supports different types of CopyFrom file. The type of file can be set by using the InputType key.

Default syntax

By default pyrla expects a file containing a list of key = value lines. In this case

  • A key listed under the CopyToWrite keyword will overwrite a value in the CopyFrom file if the CopyFrom file contains that same key in one of its key = value line. Here "same" is meant in a case sensitive way. The default separator is =. You can use the InputSeparator key in the input file to change the separator.
  • For each CopyToWrite key that is not in the CopyFrom, a key = value line will be appended at the end of the file.

LAMMPS input file

If InputFile = LAMMPS then pyrla will expect a LAMMPS input file. In this case

  • A key listed under the CopyToWrite keyword will overwrite a value in the CopyFrom file if the CopyFrom file contains a variable key .... In this case the line will be replaced by variable key equal value.
  • Any CopyToWrite key that is not in the CopyFrom file will not be used (and a warning will be issued).

Jinja2 templates

If InputFile = Jinja2 then pyrla will expect a Jinja2 template file. In this case the values associated to the keys specified in CopyToWrite will be passed to the Jinja template. This feature requires the jinja2 python package to be installed.

Acknowledgements

  • I took the idea of a python-based launcher from John Russo and his gotmilkneedpy

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyrla-0.1.0.tar.gz (31.6 kB view details)

Uploaded Source

File details

Details for the file pyrla-0.1.0.tar.gz.

File metadata

  • Download URL: pyrla-0.1.0.tar.gz
  • Upload date:
  • Size: 31.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.8.10

File hashes

Hashes for pyrla-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a8a15d5203512fa7890b1fa23c05d78647d4e4efe3f7e7fa895797b61bbb005c
MD5 2547c2aad93b23111bf8eb1053c745df
BLAKE2b-256 946400aecb508688c643f8d0272f1cde3d32e8c033efc5120dd80269396959b5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page