from oslo_utils import strutils import six from taskflow.engines.action_engine import builder from taskflow.engines.action_engine import compiler from taskflow.engines.action_engine import executor from taskflow.engines.action_engine import runtime from taskflow.engines import base from taskflow import exceptions as exc from taskflow import logging from taskflow import states from taskflow import storage from taskflow.types import failure from taskflow.utils import misc LOG = logging.getLogger(__name__) @contextlib.contextmanager def _start_stop(task_executor, retry_executor): # A teenie helper context manager to safely start/stop engine executors... task_executor.start() try: retry_executor.start() try: yield (task_executor, retry_executor) finally: retry_executor.stop() finally: task_executor.stop()
import errno import os import threading import time from oslo_utils import importutils import six from taskflow import logging from taskflow.utils import misc # Used for the reader-writer lock get the right thread 'hack' (needed below). eventlet = importutils.try_import('eventlet') eventlet_patcher = importutils.try_import('eventlet.patcher') LOG = logging.getLogger(__name__) @contextlib.contextmanager def try_lock(lock): """Attempts to acquire a lock, and auto releases if acquired (on exit).""" # NOTE(harlowja): the keyword argument for 'blocking' does not work # in py2.x and only is fixed in py3.x (this adjustment is documented # and/or debated in http://bugs.python.org/issue10789); so we'll just # stick to the format that works in both (oddly the keyword argument # works in py2.x but only with reentrant locks). was_locked = lock.acquire(False) try: yield was_locked finally: if was_locked: