Gui*_*eba 3 python django settings redis celery
好的,我已经正确安装了所有东西,以便在django中获得celery + redis
我有
INSTALLED_APPS = (
'djcelery',
'kombu.transport.django',
)
Run Code Online (Sandbox Code Playgroud)
这些都在我的设置中
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'
Run Code Online (Sandbox Code Playgroud)
我和redis一起工作了
./redis-server
Run Code Online (Sandbox Code Playgroud)
它每秒输出到终端左右,我也可以运行
./manage.py celeryd -E -B --loglevel=INFO -n w1.d820
Run Code Online (Sandbox Code Playgroud)
没有错误,我甚至可以看到我的任务被添加并成功完成
./manage celeryev
Run Code Online (Sandbox Code Playgroud)
因此,即使认为它被celeryev记录,这段代码也不起作用:
from celery.task import task
@task
def add(x, y):
return x + y
res = add.apply_async(args=[1,5])
print res.wait()
Run Code Online (Sandbox Code Playgroud)
它只是挂起而没有返回结果,我可以看到它实际上试图从redis获取它,因为如果我这样做
./redis-cli
MONITOR
Run Code Online (Sandbox Code Playgroud)
我得到很多GET试图得到一个不存在的密钥所以我的结论是django没有保存到后端我的设置有什么问题?我想我失去了一些明显的东西,我看不到它,因为我已经太长时间没有打架了.救命
顺便说一句我不能使用标准端口6379,因为我在共享服务器上.
使用这些更新
celery==2.5.3
django-celery==2.5.5
django-celery-with-redis==2.5
Run Code Online (Sandbox Code Playgroud)
你有import djcelery; djcelery.setup_loader()你的settings.py?
您可以通过运行以下命令找到它尝试连接的位置:
$ python manage.py celeryctl shell
>>> celery.broker_connection().as_uri()
Run Code Online (Sandbox Code Playgroud)
'setup_loader'非常重要,因此您必须确保包含它.
(好消息是芹菜将支持Django开箱即用2.7).
| 归档时间: |
|
| 查看次数: |
9868 次 |
| 最近记录: |