PyFrag
Public Member Functions | Public Attributes | List of all members
qmworks.plams.core.jobrunner.JobRunner Class Reference
Inheritance diagram for qmworks.plams.core.jobrunner.JobRunner:
Inheritance graph
[legend]
Collaboration diagram for qmworks.plams.core.jobrunner.JobRunner:
Collaboration graph
[legend]

Public Member Functions

def __init__ (self, parallel=False, maxjobs=0)
 
def call (self, runscript, workdir, out, err, kwargs)
 

Public Attributes

 parallel
 
 semaphore
 

Detailed Description

Class representing local job runner.

The goal of |JobRunner| is to take care of two important things -- parallelization and runscript execution:
    *   When the method |run| of any |Job| instance is executed, this method, after some preparations, passes control to a |JobRunner| instance. This |JobRunner| instance decides if a separate thread should be spawned for this job or if the execution should proceed in the main thread. This decision is based on ``parallel`` attribute which can be set on |JobRunner| creation. There are no separate classes for serial and parallel job runner, both cases are covered by |JobRunner| depending on one bool parameter.
    *   If the executed job is an instance of |SingleJob|, it creates a shell script (called runscript) which contains most of the actual computational work (usually it is just an execution of some external binary). The runscript is then submitted to a |JobRunner| instance using its method :meth:`call`. This method executes the runscript in a separate subprocess and takes care of setting proper working directory, output and error stream handling etc.

The number of simultaneously running :meth:`call` methods can be limited using *maxjobs* parameter. If *maxjobs* is 0, no limit is enforced. If *parallel* is ``False``, *maxjobs* is ignored. If *parallel* is ``True`` and *maxjobs* is a positive integer, a :func:`BoundedSemaphore<threading.BoundedSemaphore>` of that size is used to limit the number of concurrently running :meth:`call` methods.

A |JobRunner| instance can be passed to |run| with a keyword argument ``jobrunner``. If this argument is omitted, the instance stored in ``config.default_jobrunner`` is used.

Member Function Documentation

◆ call()

def qmworks.plams.core.jobrunner.JobRunner.call (   self,
  runscript,
  workdir,
  out,
  err,
  kwargs 
)
call(runscript, workdir, out, err, **kwargs)
Execute the *runscript* in the folder *workdir*. Redirect output and error streams to *out* and *err*, respectively.

Arguments mentioned above should be strings containing paths to corresponding files or folders

Other keyword arguments are ignored here but they can be useful in |JobRunner| subclasses (see :meth:`GridRunner.call`).

Returns integer value indicating the exit code returned by execution of *runscript*.

This method can be safely overridden in |JobRunner| subclasses. For example, in |GridRunner| it submits the runscript to a job scheduler instead of executing it locally.

.. note::
    This method is used automatically during |run| and should never be explicitly called in your script.

The documentation for this class was generated from the following file: