【问题标题】:Calling a function in Django view after return HttpResponse()返回 HttpResponse() 后在 Django 视图中调用函数
【发布时间】:2012-09-06 04:40:58
【问题描述】:

对于我已经提出的问题,这是一种不同的方法

Simultaneous multitasking in Django

所以它会分享介绍。


我的网络项目中有一个耗时的功能。在函数进行计算时,应呈现一个网页,通知用户计算完成后将通过电子邮件发送结果。

views.py:

def web_function(request):
    ...
    return HttpResponse(results_will_be_sent_by_mail.html)
    time_consuming_function()

由于必须渲染的页面非常简单,并且它不需要来自 time_sumption_function() 的返回信息,有没有办法跳过多任务处理并以某种方式首先渲染和显示页面,然后调用 time_sumption_function()?


可能的解决方案:

  1. 当在调用“web_function”之前的页面上按下输入按钮时,附加一些将呈现临时页面的javascript代码?

更新

最终使用芹菜。尝试 Ajax 没有成功。

【问题讨论】:

标签: python django


【解决方案1】:

函数中的 return 语句表示该函数的结束。*您的 sn-p 的 time_lasting 函数在函数的 scope 之外,因此永远不会到达。

处理任务的解决方案可能是:celery,它非常适合将函数包装为异步任务。如果您必须同步执行操作,为什么不为此使用 ajax,这样您至少可以向用户展示 BeforeSend 发生了什么?

*这适用于 Python 和大多数(如果不是全部)面向对象的编程语言

【讨论】:

  • +1,事实上,如果你有一个智能 IDE,它会告诉你“代码不可访问”。
  • +1 用于使用芹菜。但是,通常不要在您的 Django Web 进程中执行长时间运行的任务,即使使用 AJAX(因为这对客户端是异步的,但对 Django 服务器不是),因为这会通过耗尽可用请求而降低应用程序的可伸缩性 -处理线程。
  • @Hedde 你能指出一个很好的集成 BeforeSend 的教程吗?
  • @Alan 我已经用一个例子回答了另一个问题,然后你才能在这里找到它:stackoverflow.com/questions/11615901/django-api-requests/…
猜你喜欢
  • 2012-03-18
  • 2011-03-06
  • 2017-03-28
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多