Source code for aiida.work.daemon

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################

from aiida.backends.utils import load_dbenv, is_dbenv_loaded

if not is_dbenv_loaded():
    load_dbenv()

import traceback
import aiida.work.defaults as defaults
from plum.process import ProcessState
from aiida.work.process import Process
import aiida.work.persistence
from portalocker import LockException


[docs]def tick_workflow_engine(storage=None, print_exceptions=True): if storage is None: storage = aiida.work.persistence.get_default() more_work = False for proc in storage.load_all_processes(): try: storage.persist_process(proc) except LockException: continue is_waiting = proc.get_waiting_on() try: # Get the Process till the point it is about to do some work if is_waiting is not None: proc.run_until(ProcessState.WAITING) else: proc.run_until(ProcessState.STARTED) proc.tick() # Now stop the process and let it finish running through the states # until it is destroyed proc.stop() proc.run_until(ProcessState.DESTROYED) except BaseException: proc.logger.error('exception occurred:\n{}'.format(traceback.format_exc())) if print_exceptions: traceback.print_exc() continue # Check if the process finished or was stopped early if not proc.has_finished(): more_work = True return more_work
if __name__ == "__main__": """ A convenience method so that this module can be ran ticking the engine once. """ from aiida.backends.utils import load_dbenv, is_dbenv_loaded if not is_dbenv_loaded(): load_dbenv() tick_workflow_engine()