Django有类似ASP的东西吗?. NET MVC的异步控制器?
我有一些请求将由芹菜工人处理,但不会花费很长时间(几秒钟)。我希望客户端在工作人员完成后得到响应。我可以让我的视图函数等待任务完成,但我担心这会给web服务器带来太多负担。
澄清:
这是我今天可以拥有的流程
def my_view(request):
async = my_task.delay(params)
result = async.get()
return my_response(result)
async.get()
可能需要几秒钟——不要太长,这样客户端就不能等待HTTP响应返回。
这段代码可能给服务器带来不必要的压力。ASP。. NET MVC的AsynchronousController
提供的,是将这个函数分成两部分的能力,类似于:
def my_view(request):
async = my_task.delay(params)
return DelayedResponse(async, lambda result=>my_response(result))
释放web服务器去处理其他请求,直到异步操作完成。完成后,它将对结果执行lambda表达式,并返回响应。
-
与其等待请求完成,你可以返回状态"正在进行中",然后再发送一个请求来检查状态是否发生了变化。因为你在做纯粹的查找,响应将非常快,不会给你的web服务器带来太多负担。
-
您可以将此特定视图/功能外包给Tornado web服务器,该服务器专为异步回调而设计。
-
最有可能的解决方案应该不是技术,而是在UI/UX领域。
是的,你只能在任务完成后才可以做某事。你会想研究一种叫做chain()
的东西。你可以在chain中绑定芹菜任务:
chain = first_function.s(set) | second_Function.s(do)
chain()
这两个函数first_function and second_function
都是芹菜函数。只有当first_function执行完后,second_function才会执行