2013-04-08 47 views
0

我想设置一些计划的任务与芹菜托管在一个Django应用程序,在heroku上。除了不知道如何配置所有东西外,最好的方法是什么?如何排队计划的行动

比方说,用户可以选择在他们选择的时间接收每日电子邮件。

我应该有一个计划的工作,每运行5分钟。查找每个想要通过电子邮件发送的用户,然后发送电子邮件?

为每个用户安排一项任务,当他们设置他们的偏好时。 (不知道我怎么实际上实现这一点呢)

回答

1

这取决于你需要多少准确性。你想让用户选择时间到分钟吗?第二?或者允许他们选择他们希望通过电子邮件发送的时间就够了。

如果在一小时内足够准确,那么使用一个任务轮询用户每小时发送一次邮件。

如果您的用户需要将邮件准确发送到第二个邮箱,那么请为每个用户设置一个任务,以便在该时间完成。

中间的一切都归结为个人选择。什么是你更舒适的做法,更重要的是:什么产生最简单的代码与最少的故障模式

+0

感谢,用户只需要能够选择15分钟为增量所以我发射了一个查询每15分钟来查找用户去通过电子邮件发送,然后排队在芹菜个人电子邮件(至少我认为这是它是如何工作的!) – speg 2013-04-23 15:39:06

0

我会建议第一个选项(查找优秀作业的计划作业) - 更容易扩展和管理。如果你有1000个用户 - 那么发送电子邮件的任务非常多。

如果您将数据库用作celery broker,则可以使用django-celery内置的类似cron的调度,这将允许您动态创建和销毁任务。不过,我不喜欢使用DB作为我的经纪人。

此外,您可能想看看chronos

+0

您不需要使用您的数据库作为经纪人。您可以拥有一个合适的代理,并仍将该数据库用作celerybeat的后端,从而允许您在管理界面中设置timed/cron任务。 – Thomas 2013-04-24 02:34:16