3
编写与服务进行通信的芹菜任务时,正确的方法是什么?这些任务与费率限制有关并且有时在很长一段时间内缺失(无响应)?与Twitter交流的芹菜任务
我必须使用任务重试吗?如果服务缺少太多时间会怎么样?有没有办法将这些任务存储以便在较长时间后执行以后执行?
如果这是一项长期任务中的子任务会怎么样?
编写与服务进行通信的芹菜任务时,正确的方法是什么?这些任务与费率限制有关并且有时在很长一段时间内缺失(无响应)?与Twitter交流的芹菜任务
我必须使用任务重试吗?如果服务缺少太多时间会怎么样?有没有办法将这些任务存储以便在较长时间后执行以后执行?
如果这是一项长期任务中的子任务会怎么样?
首先,我建议你设置套接字超时以避免长时间等待响应。 比你可以捕获套接字TimeOutException并在这种特殊情况下重试时间很长,如15分钟。 无论如何,通常我会使用增量百分比递增的incrementalRetry,这会增加每次重试任务的时间,这在您编写依赖于可以长时间使用的外部服务的任务时非常有用。 您可以在任务设置大量的重试的像50,比通过使用var
#20 seconds
self.default_retry_delay = 20
设置标准重试时间后,你可以为你的任务实现这样的方法
def incrementalRetry(self, exc, perc = 20, args = None):
"""By default the retry delay is increased by 20 percent"""
if args:
self.request.args = args
delay = self.default_retry_delay
if self.request.kwargs.has_key('retry_deleay'):
delay = self.request.kwargs['retry_deleay']
retry_delay = delay+round((delay*perc)/100,2)
#print "delay"+str(retry_delay)
self.retry(self.request.args,
self.request.kwargs.update({'retry_deleay':retry_delay}),
exc=exc,countdown=retry_delay, max_retries=self.max_retries)
如果这是一项长期任务的子任务会怎么样?
如果您不需要的结果您可以通过使用task.delay启动它在异步模式下(参数= []) 一个很好的功能还允许您推出不同的任务,后任务组一切都完成了,你可以在你工作流程中的其他东西。