【问题标题】:Setting up service to execute tasks in web clustered environment设置服务以在 Web 集群环境中执行任务
【发布时间】:2012-06-20 04:09:25
【问题描述】:

我正在寻找在网络集群环境中可靠地执行任务(仅在某个日期/时间执行一次)的方法:例如,在初始注册后 7 天后向用户发送电子邮件提醒。我知道使用 cron/django-cron/django-chronograph 等来实现这一点的方法,但到目前为止我发现的所有东西似乎都是为单服务器场景设计的。

我想避免由于在多个服务器上运行相同的作业而发送重复的提醒,到目前为止,似乎在 Web 集群中使用锁定、过期超时等来滚动您自己的基于数据库的解决方案确实是唯一的选择。是否有任何现有的解决方案可以在 Web 集群环境中运行良好?

【问题讨论】:

  • 正是芹菜的用途,所以既然你已经知道了,我不明白你的问题。
  • 我目前正在使用 Celery(使用 Amazon SQS 作为消息代理)执行其他任务,除非我遗漏了什么,否则 Celery 无法在特定时间点运行任务。此外,在这种情况下使用 SQS 存在两个问题:1) SQS 中的最长消息保留期为 14 天 2) SQS 不保证消息只会传递一次。

标签: django amazon-web-services celery amazon-sqs


【解决方案1】:

你可以使用Celery Periodic Task

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    'add-every-30-seconds': {
        'task': 'tasks.add',
        'schedule': timedelta(seconds=30),
        'args': (16, 16)
    },
}

CELERY_TIMEZONE = 'UTC'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多