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.
你正在运行一个工人,对不对?如果是这样,你是否也运行结果后端? –
hmmmmm ...我不确定你的意思。我只是在网上跟着一些例子。安装redis并基本上试图运行这个简单的任务。如果我在我的'settings.py'文件中发布芹菜特定命令会有帮助吗? – Luca
你有结果backend配置正确吗?什么是打印“连接”?你在工作日志上看到一些错误消息吗? 在这种情况下使用'.get()'将阻止 – creativeChips