diff --git a/apps/knowledge/apps.py b/apps/knowledge/apps.py index cd703220..4f1473de 100644 --- a/apps/knowledge/apps.py +++ b/apps/knowledge/apps.py @@ -4,3 +4,36 @@ from django.apps import AppConfig class KnowledgeConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'knowledge' + + def ready(self): + """在Django应用准备好后注册Celery任务""" + try: + # 导入Celery应用 + from ops import celery_app + + # 注册高级学习任务 + try: + from knowledge.tasks.advanced_learning import ( + advanced_learning_by_document, + batch_advanced_learning + ) + celery_app.register_task(advanced_learning_by_document) + celery_app.register_task(batch_advanced_learning) + print("✅ Advanced learning tasks registered via app config") + except ImportError as e: + print(f"❌ Failed to register advanced learning tasks: {e}") + + # 注册媒体学习任务 + try: + from knowledge.tasks.media_learning import ( + media_learning_by_document, + media_learning_batch + ) + celery_app.register_task(media_learning_by_document) + celery_app.register_task(media_learning_batch) + print("✅ Media learning tasks registered via app config") + except ImportError as e: + print(f"❌ Failed to register media learning tasks: {e}") + + except Exception as e: + print(f"⚠️ Failed to register tasks via app config: {e}") diff --git a/apps/knowledge/tasks/__init__.py b/apps/knowledge/tasks/__init__.py index f9e603d9..593a8a26 100644 --- a/apps/knowledge/tasks/__init__.py +++ b/apps/knowledge/tasks/__init__.py @@ -1,6 +1,5 @@ # coding=utf-8 # Import tasks for Celery discovery -# Note: We import the specific tasks, not * to avoid circular imports -from .advanced_learning import advanced_learning_by_document, batch_advanced_learning -from .media_learning import media_learning_by_document, media_learning_batch \ No newline at end of file +# Note: We use lazy imports to avoid Django app loading issues +# Tasks will be imported when needed by Celery's autodiscover \ No newline at end of file diff --git a/apps/ops/__init__.py b/apps/ops/__init__.py index df9e301b..407d34db 100644 --- a/apps/ops/__init__.py +++ b/apps/ops/__init__.py @@ -8,26 +8,5 @@ """ from .celery import app as celery_app -# Import and register advanced learning tasks -try: - from knowledge.tasks.advanced_learning import ( - advanced_learning_by_document, - batch_advanced_learning - ) - # Register tasks with the celery app - celery_app.register_task(advanced_learning_by_document) - celery_app.register_task(batch_advanced_learning) -except ImportError: - pass - -# Import and register media learning tasks -try: - from knowledge.tasks.media_learning import ( - media_learning_by_document, - media_learning_batch - ) - # Register tasks with the celery app - celery_app.register_task(media_learning_by_document) - celery_app.register_task(media_learning_batch) -except ImportError: - pass +# 任务注册现在通过knowledge/apps.py的ready()方法处理 +# 这样可以避免Django应用未准备好时的导入问题