我在heroku上运行了一个简单的烧瓶应用程序:
from flask import Flask
app = Flask(__name__)
@app.route('/test', methods=['POST'])
def test():
return 'OK'
难以置信地成功或失败,这取决于我发送的json的大小。这是测试代码:
import json, random, string, requests
def rand_string(size):
return ''.join([random.choice(string.letters) for i in xrange(size)])
for size in (4000, 10000):
r = requests.post('http://my-app.herokuapp.com/test',
data=json.dumps(rand_string(size)),
headers={'content-type': 'application/json'})
print r.status_code
在第一次调用时,它返回状态200,在第二个http状态503上显示H13 heroku错误代码。
2014-09-18T08:23:46.594543+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path="/test" host=my-app.herokuapp.com request_id=91b1cd91-5a4f-445e-ad52-3c64733154b3 fwd="12.34.56.78" dyno=web.1 connect=5ms service=13ms status=503 bytes=0
由于临时,服务器当前无法处理请求 超载或维护服务器
情况并非如此,因为服务器启动并运行,除了我的手动测试外没有负载。
Heroku的H13 code documentation说:
当您的web dyno中的进程接受时,会抛出此错误 连接,但然后关闭套接字而不写任何东西。
但是,所有代码都是return 'OK'
,所以它不是代码。
heroku是否限制了请求的大小? gunicorn吗? 我怎样才能找到,如何配置呢?
答案 0 :(得分:1)
您可能受到了gunicorn的超时机制的影响,该机制默认为30秒。如果由于某种原因进行序列化需要的时间比此长,那么工作人员将被杀死并重新启动。