Kamal Singh
Kamal Singh

Reputation: 531

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.

Upvotes: 6

Views: 8168

Answers (5)

yensheng
yensheng

Reputation: 1325

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

Upvotes: 2

Jan Giacomelli
Jan Giacomelli

Reputation: 1339

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.

Upvotes: 2

antonagestam
antonagestam

Reputation: 4789

An alternative to Celery and cron is python-rq with rq-scheduler.

Upvotes: 0

Surajano
Surajano

Reputation: 2688

A simple solution which will prevent using heavy AMQP stack, preventing external dependencies like Celery, One thing you can do is that you can write a custom management command,

python manage.py my_daily_cmd

If you are using windows use cron, if you are using windows use at or schtasks.exe,

with cron/at/schtasks.exe, you can run your my_daily_cmd at your desired time.

Upvotes: 1

ikreb
ikreb

Reputation: 2775

I think that django-crontab is a good solution for you.

Upvotes: 0

Related Questions