Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从单个应用程序路由返回多个响应:Flask(Python)_Python_Python 3.x_Flask_Heroku - Fatal编程技术网

如何从单个应用程序路由返回多个响应: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()完成执行后才可用 我还尝试使用生成器和产

我在Heroku上托管了一个Flask应用程序,它是用Python编写的。我有一个类似这样的函数:

@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
确实是最好的方法。谢谢