How to dynamically schedule tasks in Django?

[亡魂溺海] 提交于 2019-12-21 05:24:06

问题


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.


回答1:


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.




回答2:


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




回答3:


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




回答4:


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




回答5:


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.



来源:https://stackoverflow.com/questions/43733387/how-to-dynamically-schedule-tasks-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!