5

我目前正在开发一个使用 Django 1.3 和 Django-Celery 应用程序的项目。非常棒,顺便说一下,我建议任何不熟悉芹菜的人都可以看看。

我对管理页面功能有一个特定的问题:

我们正在使用 celery 任务对第三方合作伙伴进行 RESTful API 调用。这些调用实际上是由用户操作启动的,因此您可以看到 celery 任务在这种情况下非常有用。

如果由于某种原因失败,我们有一个关于管理员应该如何重新发送回调的用户故事。现在,如果回调因标准 HTTP 响应失败而失败,我们将使用 celery 重试机制以不同的时间间隔自动重新发送它们。然而,这些回调可能是发给成千上万的合作伙伴之一(是的,有很多),并不是所有的合作伙伴都会使用标准的 HTTP 响应代码作为他们的失败响应。

长话短说,我在网上找不到任何可以通过管理界面重新发送芹菜任务的东西。我希望有人可以对此有所了解。这似乎是一个非常明显的功能,如果没有这样的功能,我相信这是有充分理由的。如果没有办法做到这一点,我会喜欢它,如果有人可以解释原因。只是想了解更多关于芹菜内部运作的信息。

感谢大家!抱歉我的啰嗦,有时我倾向于漫无边际。

4

1 回答 1

2

你可以尝试两种方法,

1:模型中的小技巧:

您可以使用布尔字段并将其命名为 celery_retry 之类的名称,并在模型保存方法中执行类似的操作。

def save(self, *args, **kwargs):
    if self.celery_retry and self.user.is_superuser():
          celery_task.apply_async()
    self.celery_retry = False
    super(MyModel, self).save(*args, **kwargs)

这只是一个想法,您可以自行决定如何以及何时提交 celery 任务。

2:扩展管理模板:

您可以扩展管理模板并将超链接放入重新提交任务的视图。

于 2011-08-23T16:44:20.550 回答