È necessario chiamare .get()
sull'oggetto AsyncTask creato per recuperare effettivamente il risultato dal back-end.
Vedere Celery FAQ.
Per chiarire ulteriormente la mia risposta.
Qualsiasi stringa è tecnicamente un ID valido, non esiste un modo per convalidare l'ID dell'attività. L'unico modo per scoprire se esiste un'attività consiste nel chiedere al back-end se ne è a conoscenza e per farlo è necessario utilizzare .get()
.
Questo introduce il problema che i blocchi .get()
quando il back-end non ha alcuna informazione sull'ID di attività che hai fornito, questo è di progettazione per consentire di avviare un'attività e quindi attendere il suo completamento.
Nel caso della domanda originale, assumerò che l'OP desideri ottenere lo stato di un'attività precedentemente completata. Per fare questo si può passare un piccolissimo timeout e timeout cattura errori:
from celery.exceptions import TimeoutError
try:
# fetch the result from the backend
# your backend must be fast enough to return
# results within 100ms (0.1 seconds)
result = AsyncResult('blubb').get(timeout=0.1)
except TimeoutError:
result = None
if result:
print "Result exists; state=%s" % (result.state,)
else:
print "Result does not exist"
Va da sé che questa unica opera se il back-end è la memorizzazione dei risultati, se non è non c'è modo di sapere se un ID attività è valido o no perché nulla tiene traccia di loro.
Ancora più chiarificazione.
Non è possibile eseguire ciò che si desidera fare utilizzando il backend AMQP perché it does not store results, it forwards them.
Il mio suggerimento sarebbe di passare a un back-end del database in modo che i risultati siano in un database che è possibile interrogare al di fuori dei moduli di sedano esistenti. Se nessuna attività esiste nel database dei risultati, è possibile assumere che l'ID non è valido.
fonte
2012-04-05 20:23:44
Vale la pena ricordare che l'eliminazione della coda non rimuove il meta dell'attività (almeno quando si usa Redis come back-end). Pertanto questo metodo non può essere utilizzato in modo affidabile per determinare se l'attività esiste ancora. – sleepycal