如何确保Celery任务以正确的设置运行?

时间:2012-02-07 14:22:15

标签: python django celery

我有两个基本上运行相同代码库的站点,设置上只有轻微差异。每个站点都在Django中构建,并集成了WordPress博客。

每个站点都需要从WordPress导入博客文章并将它们存储在Django数据库中。当用户发布帖子时,WordPress会在Django端点击一个webhook URL,从而启动一个Celery任务,该任务抓取帖子的JSON版本并导入它。

我最初的想法是,每个网站都可以运行自己的manage.py celeryd实例,每个网站都有自己的virtualenv,这两个网站会彼此不同。每个都使用单独的upstart脚本进行守护。

但看起来他们正在某种程度上相撞。我可以一次成功运行一个,但如果两个都运行,一个实例将不会接收任务,或者任务将使用错误的设置运行(在这种情况下,每个都有WORDPRESS_BLOG_URL设置。

我正在使用Redis队列,如果这有所不同。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

您是否指定了芹菜应该使用的默认队列的名称?如果您尚未设置CELERY_DEFAULT_QUEUE,则两个站点将使用相同的队列并获取彼此的消息。您需要为每个站点将此设置设置为不同的值,以使邮件保持独立。

修改

你没错,CELERY_DEFAULT_QUEUE仅适用于像RabbitMQ这样的后端。我认为您需要为每个网站设置不同的数据库编号,在broker url的末尾使用不同的编号。

答案 1 :(得分:0)

如果您正在使用django-celery,那么请确保您没有在virtualenvs之外运行的芹菜实例。然后像你一样使用manage.py celeryd启动virtualenvs中的celery实例。我建议您设置supervisord以跟踪您的实例。