我正在使用:
我在Stack Overflow上看到了几十个类似的问题,但它们似乎都没有帮助我的情况。我试过--pool solo,我检查了我的配置for enable_result_backend = True和CELERY_IGNORE_RESULT = False,它们看起来很好。
我正在做Tornado服务的REST API,其超时时间为10秒。
在该Tornado端点中,我使用已知(派生)task_id创建Celery任务。此task_id源自Tornado输入,因此对于同一请求它始终是相同的。我们的想法是拥有一个"得到这个结果"具有单个URL的功能,可用于发起请求并在请求完成后获取请求的结果。
无论如何,我等待一段时间才完成芹菜任务 - 但它并不总是在龙卷风超时之前完成,也不应该被期待(我加入一个人造的)为了测试而睡觉。)
当Tornado端点超时时,端点的客户端重新连接相同的输入,然后我重新派生(相同)task_id,并尝试获取已经运行的任务的状态。
但是,该状态始终为PENDING。我实际上可以通过使用相同的task_id重新创建另一个Celery任务来收集上一个芹菜任务的结果。好像我用相同的task_id获得2个Celery任务,第二个让我看到第一个的结果。所以看起来他们对调用者工作得很好,但我实际上得到了两次(或更多)运行的芹菜任务。
我首先检查任务,看它是否已经存在,如下所示。请注意,这不是Celery FAQ所说的:
async_result = celery.result.AsyncResult(id=my_uuid)
如果async_result.status返回' PENDING',那么我创建的任务如下:
async_result = ZipUp.apply_async(args=args, task_id=my_uuid)
问题似乎是第一个 async_result始终是PENDING,无论我是否等待足够长时间完成任务。
我错过了什么?
我再说一遍:我检查了几十个Stack Overflow问题,发现一些看似相似的东西,但似乎都没有帮助。
谢谢!