启动芹菜任务,退出,重新获取芹菜任务并获得结果

时间:2016-08-09 17:13:30

标签: python celery tornado

我正在使用:

  • 芹菜3.1.23
  • Redis 2.10.5(作为Celery后端)
  • 龙卷风4.4
  • Python 2.7(叹气)
  • macOS 10.10.5

我在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问题,发现一些看似相似的东西,但似乎都没有帮助。

谢谢!

0 个答案:

没有答案