我有一个带有端点的烧瓶restful api
api.add_resource(TestGet, '/api/1/test')
我希望使用该端点的数据来填充我的jinja模板。但每当我尝试在像这样的样本路线中调用它时
@app.route('/mytest')
def mytest():
t = get('http://localhost:5000/api/1/test')
它永远不会返回任何东西并保持循环,这意味着它正在对请求执行某些操作并且永远不会返回。有没有理由我无法在同一个烧瓶应用程序中调用它?我能够通过浏览器和另一个python REPL到达端点。彻底弄清楚为什么会发生这种情况以及为什么它永远不会返回任至少期待一个错误。
以下是我正在尝试运行的整个示例
from flask import Flask
from requests import get
app = Flask('test')
from flask_restful import Api, Resource
api = Api(app)
class TestGet(Resource):
def get(self):
return {'test': 'message'}
api.add_resource(TestGet, '/test')
@app.route('/something')
def something():
resp = get('http://localhost:5000//test').json
print(resp)
from gevent.wsgi import WSGIServer
WSGIServer(('', 5000), app).serve_forever()
答案 0 :(得分:0)
请参阅此SO主题并了解Flask限制:https://stackoverflow.com/a/20862119/5167302 具体来说,在你的情况下,你正在打这个:
您可能遇到的主要问题是服务器是单线程的。这意味着它将按顺序一次处理一个请求。这意味着如果您尝试提供多个请求(包括favicon,静态项目,如图像,CSS和Javascript文件等),请求将需要更长时间。如果任何给定的请求发生需要很长时间(例如,20秒),那么整个应用程序在该时间(20秒)内没有响应。
因此,通过在请求中发出请求,您将使您的应用程序陷入僵局。
答案 1 :(得分:0)
如果您只想调试程序,请使用app.run(threaded = True)。这将为每个请求启动一个新线程。