我发现this soultion可通过django-celery动态添加定期任务计划。
我的用例是邮件,它是为网站用户单独添加的,每个邮件都有一个与之相关的PeriodicTask,因此数据库中可能有大量的PeriodicTask记录。

我有兴趣-在这种情况下,这是否有效(合法,正确,正确)解决方案?还是最好只有一个或几个PeriodicTask可以检查邮件的最后发送时间,并在必要时进行发送?

最佳答案

根据其创建者Ask Solem in this thread的说法:


  周期性任务的数量没有已知的限制,即使有大量的计划条目,celerybeat计划程序也应能表现良好。


That Google group threadthis one最清楚地说明了您所关心的问题。

话虽如此,我还是想给你个建议:即使celerybeat调度程序能够处理大量的定期任务,也要付出代价:更多的数据库条目,更多的要监视的任务,更多的ram,或者可能更复杂因为正在创建动态任务而进行调试,所以对数据库的命中率更高,因为您将必须检查每个邮件的发送日期时间,然后查看是否发送了该电子邮件。

另一方面,如果您可以有一个定期任务,可以执行一个查询以仅检索必须发送的邮件实例,并且必须发送一封电子邮件就触发一个子任务,那么它在代码中看起来会更简单,何时必须调试它以及何时必须对其进行监视。只是我的两分钱。

希望能帮助到你。

10-05 21:36