sto usando Django sedano con Redis per eseguire alcuni compiti come questo:Django-sedano corda, celery.chord_unlock mantiene l'esecuzione di sempre non chiamando la callback fornito
header = [
tasks.invalidate_user.subtask(args = (user)),
tasks.invalidate_details.subtask(args = (user))
]
callback = tasks.rebuild.subtask()
chord(header)(callback)
Quindi, in pratica lo stesso come indicato in documentation.
Il mio problema è che quando viene chiamato questo accordo di attività, l'attività celery.chord_unlock
continua a riprovare per sempre. Le attività in header
terminano correttamente, ma a causa di chord_unlock
non viene eseguita, callback
non viene mai chiamato.
Suppongo che il mio problema è di non essere in grado di rilevare che le attività da header
sono finite, ho girato la documentazione per vedere come può essere personalizzato. Ho trovato a section, descrivendo come la sincronizzazione è implementata, c'è un esempio fornito, quello che mi manca è come faccio a ottenere che la funzione di esempio venga chiamata (cioè c'è un segnale per questo?).
Inoltre c'è una nota che questo metodo non viene utilizzato con Redis backend:
Questo è usato da tutti i backend risultato eccetto Redis e Memcached, che incrementa un contatore dopo ogni operazione nell'intestazione, quindi applicando la richiamata quando il contatore supera il numero di attività nel set.
Ma dice anche, che l'approccio Redis è meglio:
L'approccio Redis e Memcached è una soluzione molto migliore
Quale approccio è quello? Come viene implementato?
Quindi, perché chord_unlock
non è mai stato fatto e come posso renderlo rilevato finito attività header
?
sto usando: Django 1.4, sedano 2.5.3, django-sedano 2.5.5, 2.4.12 redis