Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
ext_celery.py84 linesDownload Raw Back to extensions
1from datetime import timedelta2 3from celery import Celery, Task4from celery.schedules import crontab5from flask import Flask6 7from configs import dify_config8 9 10def init_app(app: Flask) -> Celery:11    class FlaskTask(Task):12        def __call__(self, *args: object, **kwargs: object) -> object:13            with app.app_context():14                return self.run(*args, **kwargs)15 16    broker_transport_options = {}17 18    if dify_config.CELERY_USE_SENTINEL:19        broker_transport_options = {20            "master_name": dify_config.CELERY_SENTINEL_MASTER_NAME,21            "sentinel_kwargs": {22                "socket_timeout": dify_config.CELERY_SENTINEL_SOCKET_TIMEOUT,23            },24        }25 26    celery_app = Celery(27        app.name,28        task_cls=FlaskTask,29        broker=dify_config.CELERY_BROKER_URL,30        backend=dify_config.CELERY_BACKEND,31        task_ignore_result=True,32    )33 34    # Add SSL options to the Celery configuration35    ssl_options = {36        "ssl_cert_reqs": None,37        "ssl_ca_certs": None,38        "ssl_certfile": None,39        "ssl_keyfile": None,40    }41 42    celery_app.conf.update(43        result_backend=dify_config.CELERY_RESULT_BACKEND,44        broker_transport_options=broker_transport_options,45        broker_connection_retry_on_startup=True,46    )47 48    if dify_config.BROKER_USE_SSL:49        celery_app.conf.update(50            broker_use_ssl=ssl_options,  # Add the SSL options to the broker configuration51        )52 53    celery_app.set_default()54    app.extensions["celery"] = celery_app55 56    imports = [57        "schedule.clean_embedding_cache_task",58        "schedule.clean_unused_datasets_task",59        "schedule.create_tidb_serverless_task",60        "schedule.update_tidb_serverless_status_task",61    ]62    day = dify_config.CELERY_BEAT_SCHEDULER_TIME63    beat_schedule = {64        "clean_embedding_cache_task": {65            "task": "schedule.clean_embedding_cache_task.clean_embedding_cache_task",66            "schedule": timedelta(days=day),67        },68        "clean_unused_datasets_task": {69            "task": "schedule.clean_unused_datasets_task.clean_unused_datasets_task",70            "schedule": timedelta(days=day),71        },72        "create_tidb_serverless_task": {73            "task": "schedule.create_tidb_serverless_task.create_tidb_serverless_task",74            "schedule": crontab(minute="0", hour="*"),75        },76        "update_tidb_serverless_status_task": {77            "task": "schedule.update_tidb_serverless_status_task.update_tidb_serverless_status_task",78            "schedule": crontab(minute="30", hour="*"),79        },80    }81    celery_app.conf.update(beat_schedule=beat_schedule, imports=imports)82 83    return celery_app84