Manage Tasks#
An important step in the user’s workflow is monitoring/managing tasks. Whether
the user is simply trying to follow the progress of a simulation, retrieve results,
or even kill a task, the Task
class provides the necessary tools to do so.
In this section, we will cover the following topics:
Task monitoring: Learn how to monitor a task, such as getting its status and getting information about the outputs;
Killing tasks: Learn how to kill a task that hasn’t been completed yet;
Task monitoring#
The Task
class provides mechanisms to track and manage the status of a task.
With a Task
object at hand, the user can:
Get the status, i.e., whether the task is started, succeeded, failed, etc (for more details, see section about task lifecycle on our tutorial);
Get the machine type where it ran/is running;
Get the execution time.
The following snippets show how to use the Task
class to manage a task.
# create a new task or retrieve a task from a previous session
# task = simulator.run(...)
# or
# task = Task("i4ir3kvv62odsfrhko4y8w2an")
# Get status of the task.
>>> task.get_status()
<DynamicSchema: 'success'>
# Get the computational resource type where the task is
# running or was submitted to
>>> task.get_machine_type()
'c2-standard-4'
>>> task.get_computation_time()
'00:03:12'
# Get information about the output files generated by the simulation
>>> output_files_info = task.get_output_files_info()
>>> print(output_files_info)
Archive size: 262.00 KB
Contents:
Size Compressed Name
3.12 KB 859 B stdout.txt
242 B 160 B stderr.txt
5.76 KB 4.10 KB vtk/ParticleData_Fluid_40.vtk
5.76 KB 4.09 KB vtk/ParticleData_Fluid_32.vtk
5.76 KB 4.09 KB vtk/ParticleData_Fluid_17.vtk
...
4.98 KB 989 B log/SPH_log.txt
Other than just retrieving information about the task, the user has the option to control
Killing tasks#
Sometimes, a user finds out that there is a reason to not allow a task to reach
a final state. Whether there is a mistake in the simulation input files, a
running simulation has gone rogue, or simply because there is no other reason
to allow a task to proceed, the user can kill a task. The Task
class provides
a method to kill a task that hasn’t been completed yet. Tasks in the
PENDING INPUT
, SUBMITTED
and STARTED
states can be killed (see the section
on task lifecycle).
To kill a task programmatically, one has 2 options at hand: by declarative
calling the kill
method or interrupting the python session/script
when a task is being waited in the context of a sync_context
call:
# grab a task object and
# declaratively emit a kill command
>>> task = Task("i4ir3kvv62odsfrhko4y8w2an")
>>> task.kill()
# or interrupt the session while waiting for the task to complete
>>> with tak.sync_context():
task.wait() # <-- The remote simulation WILL DIE if the local session is
# interrupted while waiting for the wait() call to return
# (Ex. the user presses Ctrl+C)
Alternatively, the user can resort to the command line interface to kill the task:
$ inductiva tasks kill i4ir3kvv62odsfrhko4y8w2an
You are about to kill the following tasks:
- i4ir3kvv62odsfrhko4y8w2an
Are you sure you want to proceed (y/[N])? y
Successfully sent kill request for task i4ir3kvv62odsfrhko4y8w2an.