Source code for visualization_toolkit.helpers.dash.celery

from celery import Celery
from dash import CeleryManager


[docs] def setup_celery_app( name: str, broker_uri: str, results_backend_uri: str = None, celery_app_kwargs: dict = None, celery_manager_kwargs: dict = None, ) -> (Celery, CeleryManager): """ Intialize a celery application which is needed if using background callbacks with Dash. Generally this is a preferred setup for production dash applications. Examples ^^^^^^^^^^^^^ .. code-block:: python :caption: Example of setting up a celery app with background callback caching import uuid from visualization_toolkit.helpers.dash import setup_celery_app from visualization_toolkit.constants import APP_ENVIRONMENT # Use a different cache_by logic based on the needs of the dash application launch_uid = str(uuid.uuid4()) celery_app, celery_app_manager = setup_celery_app( name=__name__, broker_uri=APP_ENVIRONMENT.get("REDIS_URI"), celery_manager_kwargs={ "cache_by": [lambda: launch_uid], }, ) :param name: Celery application name :param broker_uri: Redis URI to use as the celery broker :param results_backend_uri: Optional URI to use as the celery results backend. This will default to ``broker_uri`` if not set. Either redis or postgres can be used. :param celery_app_kwargs: Additional keyword arguments to pass to the celery app. :param celery_manager_kwargs: Additional keyword arguments to pass to the celery manager. :return: Tuple containing the celery app and the cellery callback manager. Both of which are used in backgorund callbacks in Dash. """ results_backend_uri = results_backend_uri or broker_uri celery_app_kwargs = celery_app_kwargs or {} celery_manager_kwargs = celery_manager_kwargs or {} celery_app = Celery( name, broker=broker_uri, backend=results_backend_uri, **celery_app_kwargs ) background_callback_manager = CeleryManager(celery_app, **celery_manager_kwargs) return celery_app, background_callback_manager