Python heroku上的Flask Streaming仍会出现30秒超时错误
我正在学习Flask,并试图在Heroku上创建一个小网站。 我在Heroku上部署长任务时出现超时错误,可以通过超时增加来绕过。经过进一步调查,我发现另一个解决方案是流化。下面是一篇与我的解决方案相关的文章: 但这不是工作。30秒后仍会出现错误 文章中的代码:Python heroku上的Flask Streaming仍会出现30秒超时错误,python,heroku,flask,Python,Heroku,Flask,我正在学习Flask,并试图在Heroku上创建一个小网站。 我在Heroku上部署长任务时出现超时错误,可以通过超时增加来绕过。经过进一步调查,我发现另一个解决方案是流化。下面是一篇与我的解决方案相关的文章: 但这不是工作。30秒后仍会出现错误 文章中的代码: from flask import Flask, Response import requests app = Flask(__name__) def some_long_calculation(number): ''' h
from flask import Flask, Response
import requests
app = Flask(__name__)
def some_long_calculation(number):
'''
here will be some long calculation using this number
let's simulate that using sleep for now :)
'''
import time
time.sleep(5)
return number
@app.route('/')
def check():
def generate():
for i in range(10):
yield "<br/>" # notice that we are yielding something as soon as possible
yield str(some_long_calculation(i))
return Response(generate(), mimetype='text/html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
来自烧瓶导入烧瓶,响应
导入请求
app=烧瓶(名称)
定义一些长的计算(数字):
'''
这里将使用这个数字进行一些长时间的计算
现在让我们模拟一下使用睡眠:)
'''
导入时间
时间。睡眠(5)
返回号码
@应用程序路径(“/”)
def check():
def generate():
对于范围(10)内的i:
收益率“
”#请注意,我们正在尽快做出一些让步
收益率str(一些长期计算(i))
返回响应(generate(),mimetype='text/html')
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
运行(主机=0.0.0.0',端口=8080,调试=True)
你知道这个问题吗?编辑:我最初是在2016年回答这个问题的,当时下面的信息是真实的。今天,使用流式响应确实可以超过30秒的超时时间 您无法绕过Heroku上请求-响应周期的30秒超时行为。这是通过Heroku布线网格强制执行的 如果您需要像这样发出长时间运行的请求,您有几个选项:
您可以通过使用流式响应来避免heroku的30秒限制,我刚刚确认它正在工作
我在heroku中使用的是flask w/gunicorn,除了链接的示例代码之外,我还需要更改gunicorn超时设置:web:gunicorn“app.app:create_app()”——在我的例子中是timeout 600。默认超时时间为30秒,这恰好与heroku的超时设置相同。也许这篇文章会有所帮助:谢谢Leeh先生,我会检查一下,但解决方案似乎是创建新任务并在后台运行,而不是将数据流到web浏览器。我正在寻找数据流的解决方案,比如更新进度,可以绕过Herokurdegges的30秒超时,感谢他给出了清晰的答案,并阻止我搜索不存在的答案。我已经很晚了,但这不是真的。通过流式响应,您可以达到大约30秒的请求超时限制。更新,就在不久前,我的答案已经过时。自2016年我写下这个答案以来,情况发生了变化。不知何故,我无法编辑我的答案,所以将此评论留在这里以帮助新读者。