【问题标题】:How to queue up scheduled actions如何将计划的操作排队
【发布时间】:2013-03-30 00:07:51
【问题描述】:

我正在尝试为托管在 heroku 上的带有 celery 的 Django 应用程序设置一些计划任务。除了不知道应该如何配置一切之外,解决这个问题的最佳方法是什么?

假设用户可以选择在他们选择的时间接收每日电子邮件。

我是否应该有一个每隔 5 分钟运行一次的计划作业。查找当时希望收到电子邮件的每个用户,然后关闭电子邮件?

当每个用户设置他们的偏好时,为他们安排一个任务。 (不确定我将如何实际实现它)

【问题讨论】:

    标签: python django heroku celery django-celery


    【解决方案1】:

    这取决于您需要多少准确度。您是否希望用户选择精确到分钟的时间?第二?或者允许他们选择他们希望收到电子邮件的时间就足够了。

    如果整点时间足够准确,则使用每小时轮询用户发送邮件的任务。

    如果您的用户需要邮件精确到秒,那么为每个用户设置一个任务,定时在该秒完成。

    两者之间的一切都归结为个人选择。您更喜欢做什么,更重要的是:什么会产生最简单的代码和最少的故障模式

    【讨论】:

    • 谢谢,用户只需要能够选择 15 分钟的增量,所以我每 15 分钟触发一次查询以查找要通过电子邮件发送的用户,然后在 celery 上排队单个电子邮件(在至少我认为它是这样工作的!)
    【解决方案2】:

    我建议第一个选项(查找优秀工作的预定工作)- 更易于扩展和管理。如果您有 1000 多个用户怎么办 - 这就是发送电子邮件的大量任务。

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

    另外,您可能想查看chronos

    【讨论】:

    • 您不需要将数据库用作代理。您可以拥有一个合适的代理,并且仍然使用数据库作为 celerybeat 的后端,从而允许您在管理界面中设置定时/cron 任务。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2011-06-25
    • 2011-11-16
    • 2015-02-19
    • 1970-01-01
    相关资源
    最近更新 更多