Pregunta

¿Cuál es el enfoque correcto al escribir tareas de apio que se comunican con el servicio que tienen límites de tarifa y, a veces, falta (no responde) durante mucho tiempo de período?

¿Tengo que usar el reintento de tareas? ¿Qué pasa si el servicio le falta demasiado tiempo? ¿Hay alguna manera de almacenar estas tareas para una ejecución posterior después de un largo período de tiempo?

¿Qué pasa si esta es una subtarea en una tarea larga?

¿Fue útil?

Solución

Primero, le sugiero que establezca un tiempo de espera de socket para evitar una larga espera de una respuesta. De lo que puede atrapar el tiempo de espera del zócalo y en este caso particular a un reintento con una gran cantidad de tiempo, como 15 minutos. De todos modos, normalmente uso una incrementryrretry con un porcentaje de incremento, esto aumentará el tiempo cada vez que la tarea vuelva a intentarlo, esto es útil cuando escribe una tarea que depende de servicios externos que puedan estar disponibles durante mucho tiempo. Puede establecer en la tarea un alto número de reintentos como 50 y que establecer el tiempo de reintento estándar utilizando el VAR

#20 seconds
self.default_retry_delay = 20 

Después de implementar un método como este para su tarea.

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)

¿Qué pasa si esta es una subtarea en una tarea larga?

Si no necesita el resultado, puede iniciarlo en modo Async usando tarea. más en tu trabajo de trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top