django - 在 Heroku 上运行的 Celery Beat 进程发送任务两次

标签 django heroku celery

我有一个定期任务被发送两次。我一直无法找出原因。

Celery 配置(部分):

app.conf.CELERYBEAT_SCHEDULE = {
    'email-todays-todos': {
        'task': 'apps.todo.tasks.email_todays_todos',
        'schedule': crontab(hour='7', minute='30')
    },
    'send-onboarding-emails': {
        'task': 'apps.home.tasks.send_onboarding_emails',
        'schedule': crontab(hour='13', minute='0')
    },
}

第一个定期任务 (email_todays_todos) 发送一次没有问题,但第二个定期任务 (send_onboarding_emails) 发送两次。

我的程序文件:

web: gunicorn appname.wsgi
worker: celery -A appname worker -l info
beat: celery -A appname beat

以下是日志中发生的情况:

Mar 10 11:00:00 appname app/beat.1:  [2014-03-10 13:00:00,162: INFO/MainProcess] Scheduler: Sending due task send-onboarding-emails (apps.home.tasks.send_onboarding_emails) 
Mar 10 11:00:00 appname app/beat.1:  [2014-03-10 13:00:00,101: INFO/MainProcess] Scheduler: Sending due task send-onboarding-emails (apps.home.tasks.send_onboarding_emails) 
Mar 10 11:00:00 appname app/worker.2:  [2014-03-10 13:00:00,259: INFO/MainProcess] Received task: apps.home.tasks.send_onboarding_emails[a4dcb6ff-fa40-4a9c-beba-21c62b0bd5e5] 
Mar 10 11:00:01 appname app/worker.1:  [2014-03-10 13:00:00,450: INFO/MainProcess] Received task: apps.home.tasks.send_onboarding_emails[f97c546d-5876-4152-8344-96bd05c546b1] 
Mar 10 11:00:05 appname app/worker.2:  [2014-03-10 13:00:05,564: INFO/MainProcess] Task apps.home.tasks.send_onboarding_emails[a4dcb6ff-fa40-4a9c-beba-21c62b0bd5e5] succeeded in 5.00695208088s: True 
Mar 10 11:00:07 appname app/worker.1:  [2014-03-10 13:00:05,455: INFO/MainProcess] Task apps.home.tasks.send_onboarding_emails[f97c546d-5876-4152-8344-96bd05c546b1] succeeded in 4.76427294314s: True 

我有 2 个为工作进程运行的测功机和 1 个为节拍进程运行的测功机。

这里有什么想法吗?

最佳答案

我也有类似的问题。不确定这是否适合您,但我最终从我的设置文件中删除了 CELERYBEAT_SCHEDULE ,而是在我的tasks.py 文件中创建了一个定期任务。只需像这样装饰您想要运行的函数即可:

@periodic_task(run_every=timedelta(秒=30))

我每 30 秒运行一次,但您可以将其更改为您想要的任何间隔。

关于django - 在 Heroku 上运行的 Celery Beat 进程发送任务两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314592/

相关文章:

javascript - 将 DOM 元素插入 React 组件

python - 如何设置 celery 链中第一个任务的任务 ID?

python - Django celery ,导入错误 : Import by filename is not supported

javascript - 将 Ajax 与 celery 任务一起使用

python - Django 和 Angular POST 请求 - CSRF 失败

javascript - 如何正确设置附加到按钮的日期选择器

python - django 应用程序的 i18n 到 LANGUAGE_CODE 中列出的语言 "not"

clojure - 如何升级 Heroku Leiningen 版本?

heroku - 我应该将 SHA-1 还是 SHA-2 与 Heroku SSL Endpoint 一起使用?

从 http ://example. com 重定向到 https ://example. mysite.com