如何从单个应用程序路由返回多个响应:Flask(Python)
我在Heroku上托管了一个Flask应用程序,它是用Python编写的。我有一个类似这样的函数:如何从单个应用程序路由返回多个响应:Flask(Python),python,python-3.x,flask,heroku,Python,Python 3.x,Flask,Heroku,我在Heroku上托管了一个Flask应用程序,它是用Python编写的。我有一个类似这样的函数: @app.route(“/execute”) def execute(): doSomething() 返回响应() 现在,问题是执行doSomething()需要30秒以上,绕过了Heroku的30秒超时时间,它会杀死应用程序 我可以创建另一个线程并在其中执行doSomething(),但是响应对象需要返回一个文件,该文件只有在doSomething()完成执行后才可用 我还尝试使用生成器和产
@app.route(“/execute”)
def execute():
doSomething()
返回响应()
现在,问题是执行doSomething()
需要30秒以上,绕过了Heroku的30秒超时时间,它会杀死应用程序
我可以创建另一个线程并在其中执行doSomething()
,但是响应
对象需要返回一个文件,该文件只有在doSomething()
完成执行后才可用
我还尝试使用生成器和产量,但也无法让它们工作。比如:
@app.route(“/execute”)
def execute():
def generate():
屈服“
doSomething()
屈服文件
返回响应(generate())
但是这个应用程序需要我刷新页面才能获得第二个对象
我基本上需要做的是首先返回一个空的响应
对象,开始执行doSomething()
,然后返回另一个响应
对象。如何实现这一点?通常使用http时,一个请求意味着一个响应,就是这样
对于您的问题,您可能需要研究:
- ,用于多部件的大响应
- 允许对单个“请求”进行多个“响应”
- 与客户机进行多个查询,如果您可以控制客户机代码,这很可能是最简单的解决方案
我建议阅读,它有点技术性,但它帮助我理解了很多事情。通常http一个请求意味着一个响应,就是这样
对于您的问题,您可能需要研究:
- ,用于多部件的大响应
- 允许对单个“请求”进行多个“响应”
- 与客户机进行多个查询,如果您可以控制客户机代码,这很可能是最简单的解决方案
我推荐阅读,它有点技术性,但它帮助我理解了很多事情。你想做的是一项异步工作。为此,我建议您使用芹菜(这里有一个很好的例子:)或其他异步作业工具。在前端,您可以执行一个简单的池来等待响应,我建议您使用SocketIO()。这是一个简单而有效的解决方案。您尝试的是异步作业。为此,我建议您使用芹菜(这里有一个很好的例子:)或其他异步作业工具。在前端,您可以执行一个简单的池来等待响应,我建议您使用SocketIO()。这是一个简单而有效的解决方案。它基本上是一个异步作业。您可以使用芹菜或异步IO进行这些操作。任何操作都不能要求任何用户等待超过3秒-10秒
1) 发出AJAX请求
2) 初始化侦听操作的套接字
3) 一旦您完成操作,套接字就会发回消息,您可以稍后通过弹出窗口向用户显示
这是你能做的最好的方法
如果你可以分享你正在进行的计算,那么你可以得到更多的替代方法。这基本上是一项异步工作。您可以使用芹菜或异步IO进行这些操作。任何操作都不能要求任何用户等待超过3秒-10秒
1) 发出AJAX请求
2) 初始化侦听操作的套接字
3) 一旦您完成操作,套接字就会发回消息,您可以稍后通过弹出窗口向用户显示
这是你能做的最好的方法
如果您可以分享您正在进行的计算,那么您可以获得更多可选方法感谢所有资源!我认为使用Sockets
是最好的选择。感谢您提供的所有资源!我认为使用Sockets
是一种可行的方法。实际上,这并不完全是一种计算。我正在使用selenium
登录一个站点,并返回其中的一些数据。它涉及许多步骤,因此需要相当多的时间。我认为使用Sockets
确实是最好的方法。谢谢实际上,这不完全是一个计算。我正在使用selenium
登录一个站点,并返回其中的一些数据。它涉及许多步骤,因此需要相当多的时间。我认为使用Sockets
确实是最好的方法。谢谢