2016-09-27 58 views
0

我刚刚开始学习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

hmmmmm ...我不确定你的意思。我只是在网上跟着一些例子。安装redis并基本上试图运行这个简单的任务。如果我在我的'settings.py'文件中发布芹菜特定命令会有帮助吗? – Luca

+1

你有结果backend配置正确吗?什么是打印“连接”?你在工作日志上看到一些错误消息吗? 在这种情况下使用'.get()'将阻止 – creativeChips

回答

0

由于在该提示评论,我终于能够解决问题。我不得不添加以下内容:

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

我还需要运行工人为:

python manage.py celery worker