芹菜与redis后端

时间:2012-06-09 00:48:51

标签: python django settings redis celery

好的,我已经正确安装了所有东西,以便在django中获得celery + redis

我得到了

INSTALLED_APPS = (
    'djcelery',
    'kombu.transport.django',
)

这些在我的设置中

CELERY_REDIS_HOST = 'localhost'
CELERY_REDIS_PORT = 8889
CELERY_REDIS_DB = 0
CELERY_RESULT_BACKEND = 'redis'

BROKER_URL = "redis://localhost:8889/0"

REDIS_CONNECT_RETRY = True
CELERY_IGNORE_RESULT = True
CELERY_SEND_EVENTS = True
CELERY_TASK_RESULT_EXPIRES = 60
CELERYBEAT_SCHEDULER= 'djcelery.schedulers.DatabaseScheduler'

我让redis与

合作
./redis-server

每隔一秒输出到终端 我也可以跑

./manage.py celeryd -E -B --loglevel=INFO -n w1.d820

没有错误 我甚至可以看到我的任务被添加并成功完成

./manage celeryev

所以即使认为它被celeryev记录,这段代码也不起作用:

from celery.task import task
@task
def add(x, y):
    return x + y

res = add.apply_async(args=[1,5])
print res.wait()

它只是挂起而没有返回结果,我可以看到它实际上是试图从redis中获取它,因为如果我这样做

./redis-cli
MONITOR

我得到很多GET试图得到一个不存在的关键 所以我的结论是django没有保存到后端 我的设置有什么问题?我想我失去了一些明显的东西,我看不到它,因为我已经太长时间没有这个了。帮助

顺便说一句我无法使用标准端口6379,因为我在共享服务器上。

使用这些

进行更新
celery==2.5.3
django-celery==2.5.5
django-celery-with-redis==2.5

4 个答案:

答案 0 :(得分:6)

您的import djcelery; djcelery.setup_loader()中有settings.py吗?

您可以通过运行以下命令找到尝试连接的位置:

 $ python manage.py celeryctl shell

 >>> celery.broker_connection().as_uri()

'setup_loader'非常重要,因此您必须确保包含它。

(好消息是芹菜将支持Django开箱即用2.7)。

答案 1 :(得分:4)

在ubuntu 10.10中,当你安装redis时,它会在启动时自动启动,并且它与celery冲突,因为很明显,即使你告诉它使用这个或那个端口,如果芹菜可以连接到6379端口的redis,它会将它用作后端。我没有看到代码,但这是我的结论。 所以我用我的redis.conf关闭所有redis实例运行我想要的任何端口,然后我把它们放在我的设置上。

BROKER_URL = 'redis://localhost:8889/0'
REDIS_DB = 0
REDIS_CONNECT_RETRY = True
CELERY_RESULT_BACKEND = 'redis'
CELERY_REDIS_PORT = 8889
BROKER_PORT = 8889
CELERY_RESULT_PORT = 8889
CELERY_TASK_RESULT_EXPIRES = 10
CELERYBEAT_SCHEDULER= 'djcelery.schedulers.DatabaseScheduler'

答案 2 :(得分:0)

您使用的是什么版本的芹菜?在开发版本中,它们看起来像是使用不同的Decorator;

from celery.task import task

@celery.task()
def add(x, y):
    return x + y

答案 3 :(得分:0)

您是否在端口8889上启动Redis服务器?