如何在Django中动态调度任务?

时间:2017-05-02 08:29:33

标签: python django celery

我需要在Django中构建一个应用程序,让用户每天在运行时指定一些任务。

我看过芹菜,但找不到任何有用的东西。我找到了apply_async,我可以让任务在特定的持续时间内执行一次但不是经常性的。我错过了一些东西,但不知道是什么。

请建议我如何实现这一目标。

4 个答案:

答案 0 :(得分:1)

一个简单的解决方案,它可以防止使用繁重的AMQP堆栈,防止像Celery这样的外部依赖,你可以做的一件事就是你可以写一个custom management command

python manage.py my_daily_cmd

如果您使用的是Windows cron, 如果您使用的是Windows atschtasks.exe

使用cron / at / schtasks.exe,您可以在所需的时间运行my_daily_cmd

答案 1 :(得分:0)

我认为django-crontab对你来说是一个很好的解决方案。

答案 2 :(得分:0)

django-celery-beat包,允许您动态地将任务添加到数据库,然后按照您在数据库中的定义执行它们。(例如每5分钟)但是目前它们有错误导致该任务未附加到添加到数据库时的芹菜队列。建议的解决方法是每次添加新任务时重新启动芹菜进程。
我用Dan Baders schedule包解决了这个问题。我在每分钟安排任务,检查数据库是否需要在当前分钟执行的任务。然后我在新线程中开始每个任务 希望这会有所帮助。

答案 3 :(得分:0)

Celery和cron的替代方案是python-rq rq-scheduler