Celery AsyncResult如何确定要查询的Broker和Backend?
问题解答
你的疑惑核心在于Celery的默认App机制,下面直接给你拆解原因:
隐式绑定已初始化的App实例
当你在脚本里初始化Celery App(比如app = Celery(..., broker='redis://...', backend='redis://...'))时,Celery会自动把这个实例设为当前进程的默认App。之后创建AsyncResult(task_id)时,它会自动复用这个默认App的所有配置(包括Broker和Backend信息),所以不需要手动传入这些参数。可以通过测试验证这个逻辑
你可以新开一个完全独立的脚本,不导入或初始化你的Celery App,直接尝试创建AsyncResult(task_id),这时肯定会报错——因为找不到默认App的配置,无法连接Broker/Backend去查询任务状态。多App场景下的显式指定
如果你的项目里有多个Celery App实例,或者需要在没有默认App的环境中查询,也可以手动给AsyncResult指定App:from celery.result import AsyncResult from your_app_module import celery_app # 导入你配置好的Celery App task_result = AsyncResult("你的task_id", app=celery_app)
内容的提问来源于stack exchange,提问作者Della
相关产品推荐
相关产品推荐

