我有一个Django网站,允许用户创建将在特定日期的特定时间开始的事件。至关重要的是,他们还可以根据需要随时更改事件的开始日期/时间,直到开始的时间。事件开始时,我需要运行一个特定的任务来设置下一个事件。
想法1-APScheduler
我最初的想法是我可以为此使用APScheduler,但是它不能扩展,因为APScheduler与Web进程在同一进程中运行,因此,如果按比例放大,该任务将运行多次。
想法2-芹菜/红豆
然后我改为使用celery(和redis),但是存在的问题是,取消事件的唯一方法(例如,当用户更改事件的开始时间时)是在celery中将其标记为已撤消工作者,导致它在Redis启动时不执行。这样做很好,但是我需要在celery上使用saidb参数(以确保在重新启动工作程序时保留已撤消任务的列表),但是我无法做到这一点,因为我正在使用Heroku,并且它们的体系结构没有允许它。
想法3-Celery长期计划程序
有一个名为长期调度程序(https://github.com/ZeitOnline/celery_longterm_scheduler)的应用程序,该应用程序需要cron作业来定期轮询需要启动的任务,但对我来说这似乎有点缺陷,因为该任务不太可能在确切的启动时间运行活动的结束,这正是我所需要的。
还有其他想法吗?
我肯定有一种方法可以提示任务(根据事件的开始时间有时需要运行其他任务),以便在指定的时间准确地运行?
这似乎很普遍,但我似乎找不到一种很好的方法。