我需要在Django中构建一个应用程序,该应用程序可以在运行时指定时每天执行某些任务。
我看过芹菜,但找不到任何有帮助的东西。我找到了apply_async,并且可以在特定的持续时间内完成任务执行一次,但不会复发。我缺少一些东西,但不知道。
请建议我如何实现这一目标。
有django-celery-beat
软件包,它允许您动态地将任务添加到数据库中,然后按您在数据库中定义时执行它们。(例如,每5分钟(,但是当前它们的错误会导致该任务添加到数据库时,不会将其附加到芹菜队列中。建议的解决方法是每次添加新任务时重新启动芹菜过程。
我用Dan Baders schedule
软件包解决了它。我在每分钟安排任务,该任务检查数据库是否需要在当前分钟内执行的任务。然后我在新线程中启动每个任务。
希望这会有所帮助。
高级Python调度程序可能是您的解决方案。
https://github.com/agronholm/apscheduler
https://apscheduler.readthedocs.io/en/latest/
apscheduler可以动态添加作业。
您可以查看我的github示例:https://github.com/easytrader/apscheduler_for_django/blob/master/master/trips/views.py
一种简单的解决方案,可以防止使用重型AMQP堆栈,防止Celery
之类的外部依赖关系,您可以做的一件事是您可以编写自定义管理命令,
python manage.py my_daily_cmd
如果您使用的是Windows使用Cron,如果您在使用Windows使用或schtasks.exe,
使用cron/at/schtasks.exe,您可以在所需的时间运行my_daily_cmd
。
我认为 django-crontab
是您的好解决方案。
芹菜和cron的替代方案是python-rq。