我的芹菜任务永远不会回来

时间:2016-09-27 18:09:24

标签: django celery django-celery

我刚刚开始学习Django并且刚刚发现了芹菜来运行异步后台任务。

我有一个虚拟项目,我通过以下示例任务从互联网上窃取:

from djcelery import celery
from time import sleep      

@celery.task
def sleeptask(i):
    sleep(i)
    return i

现在在我看来,我有以下内容:

def test_celery(request):
    result = tasks.sleeptask.delay(10)
    return HttpResponse(result.task_id)

这样运行正常,当我将浏览器指向它时,我得到一些像93463e9e-d8f5-46b2-8544-8d4b70108b0d这样的随机字符串,我猜这是任务ID。

然而,当我这样做时:

def test_celery(request):
    result = tasks.sleeptask.delay(10)
    return HttpResponse(result.get())

Web浏览器循环显示“正在连接...”消息,永不返回。我的印象是,这将阻止直到任务运行并给出结果,但似乎并非如此。我做错了什么?

另一个问题是我这样做的方式,它是否会异步运行,即在任务运行时不阻塞?

修改

在我的settings.py文件中,我有:

import djcelery
# Setup celery
djcelery.setup_loader()

BROKER_URL = 'redis://localhost:6379/0'

在Django方面,我没有收到任何错误:

System check identified no issues (0 silenced).
September 27, 2016 - 18:13:12
Django version 1.9.5, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

1 个答案:

答案 0 :(得分:0)

感谢评论中的提示,我终于能够解决问题了。我不得不添加以下内容:

CELERY_IMPORTS('myproject.tasks')到我的settings.py文件。

我还需要将工作者运行为:

python manage.py celery worker