【发布时间】:2011-09-27 22:19:38
【问题描述】:
我正在查看 celery 中的 http 回调任务 - http://celeryproject.org/docs/userguide/remote-tasks.html。当远程端点可用时,它们工作得很好——但是当它不可用时,我希望它重试(根据重试策略)——或者即使远程端点返回失败。目前它似乎是一个错误,任务被忽略了。
有什么想法吗?
【问题讨论】:
我正在查看 celery 中的 http 回调任务 - http://celeryproject.org/docs/userguide/remote-tasks.html。当远程端点可用时,它们工作得很好——但是当它不可用时,我希望它重试(根据重试策略)——或者即使远程端点返回失败。目前它似乎是一个错误,任务被忽略了。
有什么想法吗?
【问题讨论】:
你应该能够像这样定义你的任务:
class RemoteCall(Task):
default_retry_delay = 30 * 60 # retry in 30 minutes
def Run(self, arg, **kwargs):
try:
res = URL("http://example.com/").get_async(arg)
except (InvalidResponseError, RemoteExecuteError), exc:
self.retry([arg], exc=exc, *kwargs)
这将继续尝试最多 max_retries 次,每 30 分钟一次。
【讨论】: