首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django异步请求

Django异步请求
EN

Stack Overflow用户
提问于 2013-04-23 16:20:34
回答 2查看 5.1K关注 0票数 2

Django有没有类似于ASP.NET MVC的Asynchronous Controller

我有一些请求将由芹菜工人处理,但不会花费很长时间(几秒钟)。我希望客户端在工作人员完成后获得响应。我可以让我的视图函数等待任务完成,但我担心这会给wait服务器带来太多负担。

澄清:

这是我今天可以拥有的流程

代码语言:javascript
复制
def my_view(request):
    async = my_task.delay(params)
    result = async.get()
    return my_response(result)

async.get()可能需要几秒钟的时间--不会太长,这样客户端就不能等待HTTP响应返回。

这段代码可能会给服务器带来不必要的压力。ASP.NET MVC的AsynchronousController提供了将该函数一分为二的能力,类似于:

代码语言:javascript
复制
def my_view(request):
    async = my_task.delay(params)
    return DelayedResponse(async, lambda result=>my_response(result))

这将释放the服务器以处理其他请求,直到异步操作完成。一旦完成,它将对结果执行lambda表达式,返回响应。

EN

回答 2

Stack Overflow用户

发布于 2013-04-23 16:53:04

  1. 而不是等待请求完成,您可以返回状态“正在进行中”,然后再发送一个请求来检查状态是否已更改。
  2. 你可以将这个特定的视图/功能外包给专为异步回调而设计的Tornado web服务器。站点的其余部分可能会继续运行在django上。
  3. 最有可能的解决方案不是技术上的,而是UI/UX领域的。如果需要很长时间,可以在通知明确的情况下通知用户。
票数 2
EN

Stack Overflow用户

发布于 2013-04-23 16:32:53

是的,只有当任务完成时,您才能执行某些操作。您可能希望研究一下名为chain()的东西。您可以在链中绑定芹菜任务:

代码语言:javascript
复制
    chain = first_function.s(set) | second_Function.s(do)

    chain()

这两个函数first_function and second_function都是芹菜函数。只有当first_function完成其执行时,才会执行second_function。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16164409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档