python - 带有redis后端的 celery

标签 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 尝试获取不存在的 key 所以我的结论是django没有保存到后端 我的设置有什么问题吗?我想我遗漏了一些明显的东西,但我看不到它,因为我为此奋斗了太久。帮助

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

使用这些进行更新

celery==2.5.3
django-celery==2.5.5
django-celery-with-redis==2.5

最佳答案

你有 import djcelery; djcelery.setup_loader() 在你的 settings.py 中?

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

 $ python manage.py celeryctl shell

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

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

(好消息是 celery 将在 2.7 版中开箱即用地支持 Django)。

关于python - 带有redis后端的 celery ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10957535/

相关文章:

python - 'utf- 8' can' t 解码位置 0 : invalid start byte 中的字节 0xc0

ios - 在应用程序中存储 iPhone 应用程序设置

python - 在 python 脚本结束后,从 python 调用的 shell 脚本会持续存在吗?

python - Django - 连接两个模型的最佳实践

python - 尝试使用 python 实现快速排序,但它不起作用

c# - Mono (Linux) 中多个 C# 库的应用程序设置

asp.net - web.Config 与数据库设置表

python - 使用 pip 未将软件包安装在 docker 容器内

python - 在 mac osx 10.9.x 上配置 Django 1.7 和 Python 3

python - 自定义 django-admin 命令模块的 handle 方法内的单元测试功能