Bash Apps
@bash_app
def echo(
name: str,
stdout=parsl.AUTO_LOGNAME # Requests Parsl to return the stdout
):
return f'echo "Hello, {name}!"'
future = echo('user')
future.result() # block until task has completed
with open(future.stdout, 'r') as f:
print(f.read())
A Parsl Bash app executes an external application by making a command-line execution. Parsl will execute the string returned by the function as a command-line script on a remote worker.
Rules for Function Contents
Bash Apps follow the same rules as Python Apps. For example, imports may need to be inside functions and global variables will be inaccessible.
Inputs and Outputs
Bash Apps can use the same kinds of inputs as Python Apps, but only communicate results with Files.
Bash Apps, unlike Python Apps, can also return the content printed to the Standard Output and Error.
Special Keywords Arguments
In addition to the inputs
, outputs
, and walltime
keyword arguments
described above, a Bash app can accept the following keywords:
stdout: (string, tuple or
parsl.AUTO_LOGNAME
) The path to a file to which standard output should be redirected. If set toparsl.AUTO_LOGNAME
, the log will be automatically named according to task id and saved undertask_logs
in the run directory. If set to a tuple(filename, mode)
, standard output will be redirected to the named file, opened with the specified mode as used by the Python open function.stderr: (string or
parsl.AUTO_LOGNAME
) Like stdout, but for the standard error stream.label: (string) If the app is invoked with
stdout=parsl.AUTO_LOGNAME
orstderr=parsl.AUTO_LOGNAME
, this argument will be appended to the log name.
Outputs
If the Bash app exits with Unix exit code 0, then the AppFuture will complete. If the Bash app
exits with any other code, Parsl will treat this as a failure, and the AppFuture will instead
contain an BashExitFailure
exception. The Unix exit code can be accessed through the
exitcode
attribute of that BashExitFailure
.
Execution Options
Bash Apps have the same execution options (e.g., pinning to specific sites) as the Python Apps.
MPI Apps
Applications which employ MPI to span multiple nodes are a special case of Bash apps, and require special modification of Parsl’s execution environment to function. Support for MPI applications is described in a later section.