【问题标题】:Django with celery: scheduled task (ETA) executed multiple times in parallel带有芹菜的Django:计划任务(ETA)并行执行多次
【发布时间】:2013-02-11 02:49:33
【问题描述】:

我正在使用 Django 开发一个 Web 应用程序,它使用 Celery 来处理异步任务,尤其是对于事务性电子邮件。

我的电子邮件任务中的一个是使用 ETA 选项安排的,但它并行执行多次,导致邮件链,非常烦人。我无法弄清楚为什么。 我检查了两次我的 Django 代码,我确定它只发布了一次。

我使用 Redis 作为代理/后端结果。

我的 Celery 守护进程托管在 Heroku 上并通过以下命令启动:

python manage.py celeryd -E -B --loglevel=INFO

感谢您的帮助。

编辑:感谢#celery IRC 频道上的一个人,我在这里找到了一个有效的解决方案:http://loose-bits.com/2010/10/distributed-task-locking-in-celery.html

【问题讨论】:

  • 问题是我不知道我的应用程序中的最大 ETA。我总是尽快发布它们,即使在很远的将来(不会经常发生)。为此,我应该更改我的应用程序设计,将其存储在数据库中并让爬虫在 1 小时前发布它们例子..

标签: django heroku celery django-celery


【解决方案1】:

【讨论】:

  • 感谢您的回答。我在这里检查一个类似的解决方案:loose-bits.com/2010/10/distributed-task-locking-in-celery.html利用 Redis。它似乎工作得很好,我对其进行了一些定制,因为我需要阻止其他相同类型和具有相同上下文的任务。我将与任务函数名称连接的任务参数散列为锁定键。我还必须从 functools 添加 wraps 装饰器,因为我使用的是基于函数的任务。
猜你喜欢
  • 2015-05-25
  • 1970-01-01
  • 2020-01-21
  • 2018-01-25
  • 2014-10-25
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2014-02-11
相关资源
最近更新 更多