2011-12-08 23 views
8

Sto costruendo un portale di segnalazione utilizzando django. In questo portale ho bisogno di dare agli utenti la possibilità di pianificare i report da eseguire su base ricorrente. Ho svolto ricerche sul django-sedano e ho compreso che è possibile utilizzare il decoratore periodic_task per pianificare un compito ricorrente, ma in tutti gli esempi ho visto che le informazioni del programma cron sono codificate nel decoratore.Pianifica le attività utilizzando django-sedano in base all'input dell'utente

@periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon")) 

Esiste un modo utilizzando Django-sedano per pianificare un'attività si ripresenta in modo dinamico basato su input da un utente?

Ad esempio, un utente utilizza un modulo per selezionare il report che desidera eseguire, fornire tutti i parametri richiesti dal report e la pianificazione quando si desidera che il report venga eseguito. Una volta elaborato il modulo, esiste un metodo o una funzione che posso chiamare per aggiungere un'attività run_report a una pianificazione? In tal caso, c'è un modo per recuperare tutti i programmi correnti memorizzati nel database in modo che possano essere visualizzati?

+0

in alternativa, è possibile pianificare una singola attività che a sua volta pianifica la successiva e così via ... – DanJ

+0

Cosa succede se una funzione interna viene creata e applicata al decoratore '@ periodic_task' con un oggetto' crontab' creato dinamicamente? Ho lo stesso problema, forse questo sarebbe di aiuto? –

+0

Ho lo stesso identico problema. Qualche informazione su come l'hai risolto? – Jannis

risposta

1

Tak uno sguardo al djcelery nel admin-Interfaccia: http://localhost:8000/admin/djcelery/

Prova se si può costruire il compito-setup richiesto là (usando crontabs/intervalli/task periodici) Se sì, c'è una grande opportunità che puoi crearlo rapidamente ..

0

Sostituisci il metodo di salvataggio nei modelli. Ogni volta che l'utente inserisce piace avviare un processo/attività, modificherà il modello che attiva l'attività da avviare.

your_app/models.py:

class My_Model(models.Model): 
customer = models.ForeignKey(User, related_name='original_customer_id') 
start_task = models.BooleanField(default=False, blank=True) 

def save(self, *args, **kwargs): 
    super(NewProject, self).save(*args, **kwargs) 
    from .tasks import my_task 
    my_task.apply_async(args=[self.pk, self.status, self.file_type],) 

your_app/tasks.py

@celery.task() 
def my_task(foo, bar): 
    #do something 
1

http://celery.readthedocs.org/en/latest/userguide/calling.html

ad esempio: -

from celery import task 

@task.task(ignore_result=True) 
def T(message=None): 
    print message 

.

T.apply_async(countdown=10, message="hi") 

esegue 10 secondi da ora.

T.apply_async(eta=now + timedelta(seconds=10),message="hi") 

esegue 10 secondi da ora, specifed utilizzando eta

T.apply_async(countdown=60, expires=120,message="hi") 

esegue in un minuto da oggi, ma scade dopo 2 minuti.

Problemi correlati