Django 后台任务等待结果
Django background tasks wait for result
由于 heroku 的 30 秒超时,我正在尝试 运行 在后台执行一些机器学习计算任务。我正在尝试实施 django-background-tasks。这是我的代码:
def process_data(request):
symbol = request.GET.get('symbol')
data = test1.now(symbol)
print(data)
return JsonResponse(data, safe=False)
@background(schedule=0)
def test1(symbol):
symbol = symbol+'ksksk'
#long running machine learning stuff
return symbol
我在等待计算完成时显示加载屏幕,然后 return 使用 jsonresponse 显示数据。但是当我打印它显示的数据类型而不是我需要的数据时:
<class 'background_task.models.Task'>
如何将我在后台计算的数据获取到原始视图,以便我可以显示输出?
后台任务通常是异步的,这意味着进程将 运行 在后台运行。在我看来,期望您的请求立即得到结果没有任何意义。接收例如更有意义。 201 已创建,通知用户请求已收到,将进行处理。
当应用程序处理它时,它可以将结果写入数据库并通过 API 或接口公开结果。
app.com/run-computation?symbol=something # 201 Created
# (API)view
def run_computation(request):
symbol = request.GET.get('symbol')
data = compute.now(symbol)
return JsonResponse({"201"}, safe=True)
# Task
@background(schedule=0)
def compute(symbol):
# Do a lot of exciting stuff
result = this_will_take_a_while(symbol)
# Write result to database so it can be exposed
ComputeResult.objects.create(symbol=symbol, result=result)
# Most likely this task will not return anything, since the result
# is stored when completed and exposed elsewhere. When it fails
# it is stored in the Task object:
# @see: https://github.com/arteria/django-background-tasks/blob/master/background_task/models.py#L206
当计算完成并且结果可用时,可以公开它:
# (API)view
def get_results():
results = ComputeResult.objects.all()
return JsonResponse(serialize_results(results))
app.com/results/
[{
"symbol": "something",
"result": [...]
},
{
"symbol": "interesting",
"result": [...]
}]
您当前返回的对象是一个内部对象,包含django-background-tasks如何处理异步任务的信息。
由于 heroku 的 30 秒超时,我正在尝试 运行 在后台执行一些机器学习计算任务。我正在尝试实施 django-background-tasks。这是我的代码:
def process_data(request):
symbol = request.GET.get('symbol')
data = test1.now(symbol)
print(data)
return JsonResponse(data, safe=False)
@background(schedule=0)
def test1(symbol):
symbol = symbol+'ksksk'
#long running machine learning stuff
return symbol
我在等待计算完成时显示加载屏幕,然后 return 使用 jsonresponse 显示数据。但是当我打印它显示的数据类型而不是我需要的数据时:
<class 'background_task.models.Task'>
如何将我在后台计算的数据获取到原始视图,以便我可以显示输出?
后台任务通常是异步的,这意味着进程将 运行 在后台运行。在我看来,期望您的请求立即得到结果没有任何意义。接收例如更有意义。 201 已创建,通知用户请求已收到,将进行处理。
当应用程序处理它时,它可以将结果写入数据库并通过 API 或接口公开结果。
app.com/run-computation?symbol=something # 201 Created
# (API)view
def run_computation(request):
symbol = request.GET.get('symbol')
data = compute.now(symbol)
return JsonResponse({"201"}, safe=True)
# Task
@background(schedule=0)
def compute(symbol):
# Do a lot of exciting stuff
result = this_will_take_a_while(symbol)
# Write result to database so it can be exposed
ComputeResult.objects.create(symbol=symbol, result=result)
# Most likely this task will not return anything, since the result
# is stored when completed and exposed elsewhere. When it fails
# it is stored in the Task object:
# @see: https://github.com/arteria/django-background-tasks/blob/master/background_task/models.py#L206
当计算完成并且结果可用时,可以公开它:
# (API)view
def get_results():
results = ComputeResult.objects.all()
return JsonResponse(serialize_results(results))
app.com/results/
[{
"symbol": "something",
"result": [...]
},
{
"symbol": "interesting",
"result": [...]
}]
您当前返回的对象是一个内部对象,包含django-background-tasks如何处理异步任务的信息。