2009-06-22 16 views
48

L'ultima versione di Google App Engine supporta un nuovo Task Queue API in Python. Stavo confrontando le funzionalità di questa API con la già esistente Cron service. Per lavori in background che non sono avviati dall'utente, come l'acquisizione di un feed RSS e l'analisi su un intervallo giornaliero. L'API della coda di attività può e deve essere utilizzata per richieste non avviate dall'utente come questa?Google App Engine - Task code vs Cron Jobs

risposta

24

Direi "una specie di". Le cose da ricordare sulle code attività sono:

1) un limite di operazioni al minuto/ora/giorno non è lo stesso di ripetere qualcosa a intervalli regolari. Anche con la dimensione del token bucket impostata su 1, non penso che tu sia garantito che quelle ripetizioni saranno equamente distanziate. Dipende da quanto sono seri quando dicono che la coda è implementata come un token bucket e se tale affermazione dovrebbe essere una parte garantita dell'interfaccia. Trattandosi di laboratori, nulla è ancora garantito.

2) se un compito fallisce allora è riaccodato. Se un cron job fallisce, viene loggato e non ritentato fino a quando non lo è di nuovo. Quindi un lavoro cron non si comporta allo stesso modo come un'attività che aggiunge una copia di se stesso e quindi aggiorna il feed o come un'attività che aggiorna il feed e quindi aggiunge una copia di se stesso.

Può anche essere possibile mock up cron jobs utilizzando attività, ma dubito ne vale la pena. Se stai cercando di aggirare un cron job che richiede più di 30 secondi per essere eseguito (o raggiunge qualsiasi altro limite di richieste), puoi dividere il lavoro in pezzi e avere un cron job che aggiunge tutti i pezzi a un coda dei compiti. Ci sono state alcune discussioni (nel blog GAE?) Sull'aslfetch asincrono, che potrebbe essere il miglior modo per aggiornare i feed RSS.

+1

asincrona UrlFetch esiste oggi, vedi http://code.google.com/appengine/docs/python/urlfetch/asynchronousrequests.html - ma non sono sicuro di come sarebbe il modo migliore per aggiornare i feed RSS; forse hai qualcos'altro in mente? –

+1

Per qualche motivo mi aspettavo qualcosa che richiamasse un URL quando i dati recuperati arrivavano. Non sono sicuro da dove ho avuto questa idea, forse, forse la mia immaginazione. Se si stanno aggiornando molti feed RSS, tuttavia, è necessario che le richieste HTTP siano in qualche modo parallele e solo le code di attività consentano così tante istanze simultanee. Molto probabilmente l'API che indichi fa già il lavoro. –

+4

vale la pena aggiungere che è anche possibile utilizzare un cron job per compilare/gestire la coda delle attività, in modo da poterle avere in entrambe le direzioni. –

5

Il mio modo di vedere le cose è che se io sono solo l'analisi di un RSS feed un lavoro Cron potrebbe essere abbastanza buono. Se devo analizzare il numero X di feed RSS specificati in fase di esecuzione da un utente o da qualsiasi altra variabile di sistema, sceglierei le attività ogni volta.

Dico solo questo perché in passato ho dovuto eseguirli molte ricerche di Twitter definiti dall'utente ad intervalli regolari e con posti di lavoro Cron ho finito facendo un sistema di accodamento molto male per eseguire le richieste che dovevano essere eseguito - esso didn' t scale, non è stato d'aiuto e l'intervallo più piccolo che un processo cron può essere è solo di 1 minuto (avevo più ricerche da eseguire rispetto ai minuti del giorno).

La cosa interessante delle attività è che è possibile assegnare loro un ETA, quindi è possibile dire che mi piacerebbe che questo venga eseguito 47 secondi in futuro, o vorrei che fosse eseguito alle 12:30.