请求无法在同一Flask应用中调用多个路由
我在用Python的Requests库调用同一个应用里的第二个路由时遇到了问题,使用的是Flask框架。我知道直接调用函数是最好的做法,但我需要通过URL来调用,使用requests库。比如说:
from flask import Flask
import requests
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!" # This works
@app.route("/myrequest")
def myrequest():
#r = requests.get('http://www.stackoverflow.com', timeout=5).text # This works, but is external
#r = hello() # This works, but need requests to work
r = requests.get('http://127.0.0.1:5000/', timeout=5).text # This does NOT work - requests.exceptions.Timeout
return r
if __name__ == "__main__":
app.run(debug=True, port=5000)
1 个回答
10
你的代码假设你的应用可以同时处理多个请求:一个是最初的请求,还有一个是在处理最初请求时产生的请求。
如果你像这样运行开发服务器 app.run()
,它默认是在单线程模式下运行的;所以,它一次只能处理一个请求。
要让开发服务器支持多个线程,可以使用 app.run(threaded=True)
。
从Flask 1.0开始,开发服务器默认就是多线程的。