Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to dynamically schedule tasks in Django?

I need to build an app in Django that lets the user do some task everyday at the time they specify at runtime.

I have looked at Celery but couldn't​ find anything that will help. I found apply_async and I can get the task to execute once at the specificied duration but not recurrent. I am missing something but don't know what.

Please suggest how can I achieve this.

like image 812
Kamal Singh Avatar asked May 02 '17 08:05

Kamal Singh


2 Answers

There is django-celery-beat package which allows you to dynamicly add tasks to database and then they are executed as you defined in database.(e.g. every 5 minutes) But currently they have bug which causes that task is not appended to celery queue when added to database. One suggested workaround is to restart celery process every time that new task is added.
I solved it with Dan Baders schedule package. I scheduled task on every minute which checks database for tasks that need to be executed in current minute. Then I start each of this tasks in new thread.
Hope this helps.

like image 72
Jan Giacomelli Avatar answered Oct 01 '22 06:10

Jan Giacomelli


Advanced Python Scheduler might be a solution for you.

https://github.com/agronholm/apscheduler

https://apscheduler.readthedocs.io/en/latest/

APScheduler can dynamically add jobs.

You can look my github example: https://github.com/easytrader/Apscheduler_for_django/blob/master/trips/views.py

like image 21
yensheng Avatar answered Oct 01 '22 07:10

yensheng