我正在使用 djkombu 传输进行本地开发,但我可能会在生产中使用 amqp(兔子)。
我希望能够迭代特定类型的失败并重新提交。这将是在服务器上发生故障或由某些新的数据变化触发的某些边缘情况错误的情况下。
因此,在修复某些错误或第三方网站备份后,我最多可能会在 12 小时后重新提交作业。
我的问题是:有没有办法通过结果后端访问旧的失败作业并使用相同的参数等重新提交它们?
我正在使用 djkombu 传输进行本地开发,但我可能会在生产中使用 amqp(兔子)。
我希望能够迭代特定类型的失败并重新提交。这将是在服务器上发生故障或由某些新的数据变化触发的某些边缘情况错误的情况下。
因此,在修复某些错误或第三方网站备份后,我最多可能会在 12 小时后重新提交作业。
我的问题是:有没有办法通过结果后端访问旧的失败作业并使用相同的参数等重新提交它们?
您可能可以使用以下方式访问旧作业:
CELERY_RESULT_BACKEND = "database"
并在您的代码中:
from djcelery.models import TaskMeta
task = TaskMeta.objects.filter(task_id='af3185c9-4174-4bca-0101-860ce6621234')[0]
但我不确定你能找到启动任务的论据......也许是TaskState的东西......
我从来没有这样用过。但是您可能要考虑task.retry功能?来自 celery 文档的示例:
@task()
def task(*args):
try:
some_work()
except SomeException, exc:
# Retry in 24 hours.
raise task.retry(*args, countdown=60 * 60 * 24, exc=exc)
来自 IRC
<asksol> dpn`:任务 args 和 kwargs 不与结果一起存储
<asksol> dpn`:但您可以创建自己的模型并将其存储在那里(例如使用 task_sent 信号)
<asksol> 发送任务时我们不存储任何东西,只发送一条消息。但是自己做很容易
这是我所期待的,但希望避免。
至少我现在有答案了:)