在我的celery 任务中,我想计算一个数组的中位数。
我的观点:
import myapp.tasks as tasks
def my_view(request):
data_arr = [[1,2], [3,4]]
response = {
'median': tasks.median.delay(data_arr).id
}
return HttpResponse(json.dumps(response))
下面是任务文件:
from celery import shared_task
import numpy
@shared_task
def median(arr):
return numpy.mean(arr)
当我调用视图时,我可以得到以下输出:
{"median": "88edea52-c60a-42a8-ad8d-799a4c7117a6"}
问题是celery 输出以下错误:
File "/Users/tolga/Desktop/projects/python/nadir/process/tasks.py", line 7, in median
return numpy.mean(arr).id
AttributeError: 'numpy.float64' object has no attribute 'id'
我知道这个错误,但我不知道如何继续。
1条答案
按热度按时间omvjsjqw1#
如果你想计算一个数组的中值来解决这个问题,你需要从你的任务函数中删除对
.id
的调用,并且你可以直接返回numpy.mean
的结果,而不是返回任务结果的id
:这将返回arr数组的中值作为任务的结果。
但是如果你想返回任务的
id
作为视图的结果,你可以使用AsyncResult
类来检索任务的结果并在视图中返回它:这将检索任务的结果,并将其包含在响应对象中,而不是包含在任务的
id
中