我刚刚开始学习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.
答案 0 :(得分:0)
感谢评论中的提示,我终于能够解决问题了。我不得不添加以下内容:
CELERY_IMPORTS('myproject.tasks')
到我的settings.py文件。
我还需要将工作者运行为:
python manage.py celery worker