Python 在服务器上执行计算时在pag上显示进度条

Python 在服务器上执行计算时在pag上显示进度条,python,web-applications,Python,Web Applications,我试图使用webapp创建一个页面,该页面可以计算一些内容并将答案返回给用户 基本上我有这样的想法: class Index(webapp2.RequestHandler): def post(self): computeforlongtime() return pagewithanswer 其中pagewithanswer是html页面字符串。所以现在它需要用户等待很长时间,然后显示答案。我如何改变它,使它显示某种进度条或其他什么?当我从该方法返回时,

我试图使用webapp创建一个页面,该页面可以计算一些内容并将答案返回给用户

基本上我有这样的想法:

class Index(webapp2.RequestHandler):
    def post(self):
        computeforlongtime()
        return pagewithanswer
其中pagewithanswer是html页面字符串。所以现在它需要用户等待很长时间,然后显示答案。我如何改变它,使它显示某种进度条或其他什么?当我从该方法返回时,页面会被替换,我看不到一种方法来处理这个问题

我非常感谢你的帮助。
谢谢。

有很多方法可以做到这一点,这取决于你真正想要什么,我会尽量减少一些:

  • 使用XMLHttpRequest执行查询(最好使用像jQuery这样的框架),在操作过程中显示一个不确定的进度条,在获得结果时显示结果而不是进度条

    • 优点:超级简单
    • 缺点:用户不知道进程,也不知道它是否还在运行
  • 使用XMLHttpRequest进行查询,让服务器将其进度存储在某处,不时使用XMLHttpRequest查询进度的当前状态,显示确定的进度条,您可能会找到一个库,可以计算剩余时间的估计值

    • 优点:
      • 用户对实际进度有反馈
      • 您可以同时在不同的设备上显示进度条,甚至可以创建“所有正在运行的作业”的视图
    • 缺点:
      • 每秒轮询进程可能会消耗一些CPU服务器端和大量用户
  • 使用XMLHttpRequest执行查询,服务器会不时地将进度发送回客户端。从老式的HTTP长轮询到web套接字,您可以使用各种推送技术来实现这一点。您可以使用RabbitMQ、crossbar.io等工具

    • 赞成:您可以将新安装的crossbar.io重新用于许多其他用途
    • 反对:哇,安装crossbar.io来推动进程
  • 您可以通过不时刷新缓冲区来流化HTTP响应中的进度,如twitter流API

    • 赞成者:看起来很容易
    • 缺点:你可能会被很多像缓存、缓冲区之类的小把戏打败

  • 您需要使用ajax调用。。。您可以使用javascript在html页面中执行此操作。。。比如说
    $(“#some_div”).load(“/a/rout/to/class/Index”)
    ,somediv中有一些动画进度条