Source code for scalems.radical

"""Workflow subpackage for ScaleMS execution dispatching to RADICAL Pilot.

Manage workflow context for RADICAL Pilot.

Command Line Invocation::

    python -m scalems.radical \\
        --resource local.localhost --venv $HOME/myvenv --access local myworkflow.py

For required and optional command line arguments::

    python -m scalems.radical --help

or refer to the web-based documentation for
`scalems.radical command line`.

The user is largely responsible for establishing appropriate
`RADICAL Cybertools <https://radical-cybertools.github.io/>`__
(RCT) software environment at both the client side
and the execution side. See :ref:`rp setup` in the
:doc:`install` for complete documentation.

See Also:
    Refer to https://github.com/SCALE-MS/scale-ms/issues/141
    for the status of `scalems` support for automatic execution environment bootstrapping.

See Also:
    * `scalems.messages`
    * `scalems.execution`
    * `scalems.radical.runtime`
    * https://github.com/SCALE-MS/scale-ms/issues/90

"""
# TODO: Consider converting to a namespace package to improve modularity of
#  implementation.

__all__ = ["configuration", "executor_factory", "parser", "workflow_manager"]

import asyncio
import logging

import scalems.workflow
from ..invocation import make_parser as _make_parser
from .runtime_configuration import configuration
from .runtime_configuration import parser as _runtime_parser
from .runtime import executor_factory

logger = logging.getLogger(__name__)
logger.debug("Importing {}".format(__name__))

parser = _make_parser(__package__, parents=[_runtime_parser()])


[docs]def workflow_manager(loop: asyncio.AbstractEventLoop, directory=None): """Manage a workflow context for RADICAL Pilot work loads. The rp.Session is created when the Python Context Manager is "entered", so the asyncio event loop must be running before then. To help enforce this, we use an async Context Manager, at least in the initial implementation. However, the implementation is not thread-safe. It is not reentrant, but this is not checked. We probably _do_ want to constrain ourselves to zero or one Sessions per environment, but we _do_ need to support multiple Pilots and task submission scopes (_resource requirement groups). Further discussion is welcome. Warning: The importer of this module should be sure to import radical.pilot before importing the built-in logging module to avoid spurious warnings. """ return scalems.workflow.WorkflowManager(loop=loop, directory=directory)