是否可以找出具有特定任务 ID 的任务是否存在?当我尝试获取状态时,我将始终处于待定状态。
>>> AsyncResult('...').status
'PENDING'
我想知道给定的任务 ID 是否是真正的芹菜任务 ID 而不是随机字符串。我想要不同的结果,具体取决于某个 ID 是否存在有效任务。
过去可能有一个具有相同 ID 的有效任务,但结果可能已从后端删除。
原文由 dominik 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果任务 ID 未知,AsyncResult.state 会返回 PENDING。
待办的
任务正在等待执行或未知。任何未知的任务 ID 都暗示处于挂起状态。
http://docs.celeryproject.org/en/latest/userguide/tasks.html#pending
如果您需要将未知 ID 与现有 ID 区分开来,您可以提供自定义任务 ID:
>>> from tasks import add
>>> from celery.utils import uuid
>>> r = add.apply_async(args=[1, 2], task_id="celery-task-id-"+uuid())
>>> id = r.task_id
>>> id
'celery-task-id-b774c3f9-5280-4ebe-a770-14a6977090cd'
>>> if not "blubb".startswith("celery-task-id-"): print "Unknown task id"
...
Unknown task id
>>> if not id.startswith("celery-task-id-"): print "Unknown task id"
...
原文由 mher 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答861 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
Celery 在发送任务时不会写入状态,这在一定程度上是一种优化(请参阅 文档)。
如果您确实需要它,添加起来很简单:
然后您可以测试 PENDING 状态以检测任务是否(看似)未发送: