修复Celery递归调用错误

- 移除Django应用配置中的手动任务注册
- 使用Celery的imports配置确保任务模块被导入
- 避免在ready()方法中访问Celery应用
- 使用Celery的自动发现机制处理任务注册

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
朱潮 2025-08-31 01:33:18 +08:00
parent a5d1dda65f
commit c4eaeb6499
2 changed files with 16 additions and 31 deletions

View File

@ -6,34 +6,7 @@ class KnowledgeConfig(AppConfig):
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}")
"""在Django应用准备好后确保Celery任务能被发现"""
# 不在这里手动注册任务让Celery的自动发现机制处理
# 这样可以避免递归调用问题
pass

View File

@ -30,4 +30,16 @@ app.conf.update(
key) for
key
in configs.keys()})
# 配置任务自动发现
app.autodiscover_tasks(lambda: [app_config.split('.')[0] for app_config in settings.INSTALLED_APPS])
# 确保任务模块被导入
app.conf.update(
imports=[
'knowledge.tasks.advanced_learning',
'knowledge.tasks.media_learning',
'knowledge.tasks.embedding',
'knowledge.tasks.generate',
'knowledge.tasks.sync'
]
)