我在Django的tasks.py
中有add()
任务,如下所示*我在Windows 11:上的django中使用Celery 5.2.7和django-Celery结果
# "store/tasks.py"
from celery import shared_task
@shared_task
def add(x, y): # Here
return x + y
然后,我在views.py
中的test()
中调用了add.delay(3, 4)
,如下所示:
# "store/views.py"
from .tasks import add
from django.http import HttpResponse
def test(request):
add.delay(3, 4) # Here
return HttpResponse("Test")
然后,我可以正确地得到以下结果:
Task store.tasks.add[...] succeeded in 0.06s: 7 # Here
但是,当在test()
中调用add.s(3, 4)
和add.si(3, 4)
时,如下所示,没有显示任何内容:
# "store/views.py"
from .tasks import add
from django.http import HttpResponse
def test(request):
add.s(3, 4) # Here
add.si(3, 4) # Here
return HttpResponse("Test")
那么,s()
和si()
在Django中不能正常工作吗?
.s(…)
方法[celecer-doc]创建签名:它基本上是一个带有数据的对象,用于指定要调用的函数和参数。但是,它不会调度任务,也不会在方法本身中对其进行评估。
至于.si()
[celecer-doc]也创建了一个签名,但它是不可变的。
您可以安排任务,例如:
from django.http import HttpResponse
from .tasks import add
def test(request):
add.s(3, 4).apply_async()
add.si(3, 4).apply_async()
return HttpResponse('Test')
但是,这不会返回结果,而是返回一个任务。您可以等待这些任务返回,或者例如将任务处理程序保存在数据库中。
因此,它将把任务添加到队列中,最终一个工作人员将拾取并评估它