Python: vuelva a intentar una tarea de apio fallida desde otra cola
Estoy publicando datos en un servicio web en Celery. A veces, los datos no se publican en el servicio web debido a que Internet está inactivo y la tarea se vuelve a intentar infinitas veces hasta que se publica. No es necesario volver a intentar la tarea porque la red estaba inactiva y, por lo tanto, no es necesario volver a intentarlo.
Pensé en una mejor solución, es decir, si una tarea falla tres veces (reintentando un mínimo de 3 veces), entonces se cambia a otra cola. Esta cola contiene una lista de todas las tareas fallidas. Ahora, cuando Internet está activo y los datos se publican en la red, es decir, la tarea se ha completado desde la cola normal, comienza a procesar las tareas de la cola que han fallado. Esto no desperdiciará la memoria de la CPU al volver a intentar la tarea una y otra vez.
Aquí está mi código: - En este momento, solo estoy volviendo a intentar la tarea nuevamente, pero dudo si esa será la forma correcta de hacerlo.
@shared_task(default_retry_delay = 1 * 60, max_retries = 10)
def post_data_to_web_service(data,url):
try :
client = SoapClient(
location = url,
action = 'http://tempuri.org/IService_1_0/',
namespace = "http://tempuri.org/",
soap_ns='soap', ns = False
)
response= client.UpdateShipment(
Weight = Decimal(data['Weight']),
Length = Decimal(data['Length']),
Height = Decimal(data['Height']),
Width = Decimal(data['Width']) ,
)
except Exception, exc:
raise post_data_to_web_service.retry(exc=exc)
¿Cómo mantengo 2 colas simultáneamente e intento ejecutar tareas desde ambas colas?
Settings.py
BROKER_URL = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'