2013-02-25 84 views
2

我正在开发一个Django的Web应用程序,它使用Celery处理异步任务,尤其是事务性电子邮件。Django与芹菜:计划任务(ETA)并行执行多次

在我的电子邮件任务上的一个计划与ETA选项,但它并行执行多次导致邮件链,非常讨厌。我无法弄清楚为什么。 我检查了两次我的Django代码,我确信它只发布一次。

我使用Redis作为经纪人/后端结果。

我芹菜守护程序托管在Heroku上,并通过这个命令启动:

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

感谢您的帮助。

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

+2

一定要阅读:http://docs.celeryproject.org/en/latest/getting-started/brokers/redis.html#caveats – asksol 2013-02-26 13:10:00

+0

问题是我不知道我的应用程序中的最大ETA。我总是尽可能快地发布它们,即使在将来也是如此(不经常发生)。要做到这一点,我应该更改我的应用程序设计,将其存储在数据库中,并且有一个爬虫程序可以在1小时前发布它们例如.. – 2013-02-26 18:26:21

回答

2
+2

感谢您的回答。 我在这里查看类似的解决方案:http://loose-bits.com/2010/10/distributed-task-locking-in-celery.html利用Redis。 它似乎工作得很好,我定制了一点,因为我需要阻止其他相同类型的任务和相同的上下文。 我将与任务函数名称连接的任务参数散列为锁定键。 因为我使用的是基于函数的任务,所以我还必须添加functools的wrapper装饰器。 – 2013-02-26 04:22:27