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啓動它在異步模式下(參數= []) 一個很好的功能還允許您推出不同的任務,後任務組一切都完成了,你可以在你工作流程中的其他東西。