Domanda

Qual è l'approccio giusto quando scrive compiti di sedano che comunicano con un servizio che hanno un limiti di frequenza e, a volte è mancante (non risponde) per un lungo periodo di tempo?

Devo uso compito di tentativi? Che cosa succede se il servizio manca troppo tempo? C'è un modo per memorizzare questi compiti per l'esecuzione più tardi, dopo un lungo periodo di tempo?

Che cosa succede se si tratta di un'attività secondaria in un lungo lavoro?

È stato utile?

Soluzione

In primo luogo, vi suggerisco di impostare un timeout presa per evitare lunghe in attesa di una risposta. Che si può prendere il TimeoutException presa e in questo caso particoular ad un nuovo tentativo con la grande quantità di tempo, come 15 minuti. Comunque normalmente io uso un incrementalRetry con una percentuale di incremento, questo aumenterà il tempo ogni volta che il nuovo tentativo compito, questo è utile quando si scrive compito che dipende da servizi esterni che possono essere disponibili per lungo tempo. È possibile impostare il compito di un numero elevato di tentativi, come 50 e che insieme al numero di tentativi standard utilizzando il var

#20 seconds
self.default_retry_delay = 20 

dopo è possibile implementare un metodo come questo per il vostro compito

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)

Che cosa succede se si tratta di un'attività secondaria in un lungo lavoro?

Se non è necessario il risultato che si può lanciare in modalità asincrona, utilizzando task.delay (args = []) Una caratteristica interessante è anche il gruppo di lavoro che permettono di lanciare diversi compiti e dopo tutto quello che sono finiti in grado di qualcos'altro in lavorate flusso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top