2012-10-22 10 views
10

Ho un piccolo script che accoda i compiti per l'elaborazione. Questo script fa un sacco di query sul database per ottenere gli elementi che dovrebbero essere accodati. Il problema che sto affrontando è che i lavoratori del sedano iniziano a raccogliere i compiti non appena vengono accodati alla sceneggiatura. Questo è corretto ed è il modo in cui si suppone che il sedano funzioni, ma questo spesso porta a punti morti tra la mia sceneggiatura e i lavoratori del sedano.Come posso rinviare l'esecuzione delle attività di Celery?

C'è un modo per accodare tutti i miei compiti dallo script ma ritardare l'esecuzione fino al completamento dello script o fino a un ritardo temporale prefissato?

Non ho trovato questo nella documentazione di sedano o django-sedano. È possibile?

Attualmente come una soluzione rapida ho pensato di aggiungere tutti gli elementi da elaborare in un elenco e quando il mio script è stato eseguito eseguendo tutte le query, posso semplicemente scorrere l'elenco e accodare le attività. Forse questo risolverebbe il problema ma quando hai migliaia di elementi da accodare, questa potrebbe essere una cattiva idea.

risposta

1

Penso che si sta cercando di evitare condizioni di gara dei propri script, non chiedendo un metodo per ritardare l'esecuzione di un'attività.

Quindi è possibile creare un'attività e in tale attività, chiamare ciascuna delle attività con .apply(), non .apply_async() o .delay(). In modo che queste attività vengano eseguite in sequenza

Problemi correlati