Python请求库不能与Flask app自己的路由一起使用

时间:2017-03-12 19:41:42

标签: python curl flask routing python-requests

在我的烧瓶应用程序上,我有一条路线(http://localhost:5000/api/users/),它将数据库中的用户列表作为JSON格式返回,并且在通过curl或google chrome postman请求时它完全正常。假设路由被声明为代码下面:

@app.route('/api/users/')
def users():
    return 'Some json results...'

然而,在我的应用程序上有一点我还有另一条路线需要使用相同的用户列表,所以我决定提交一个get请求并从'/ api / users /'路由中拉出用户。我已经安装了python请求库,下面的路由定义应返回相同的用户列表:

@app.route('/api/someroute/')
def someroute():
    r = requests.get('http://localhost:5000/api/users/')
    return r.json()

现在通过邮递员或卷曲向此路线('/ api / someroute /')提交获取请求,直到我关闭应用程序为止。它不返回任何内容,没有错误,也冻结所有其他路由。就像我正在尝试从用户请求数据路由('/ api / users /')的请求仍然加载'someroute'时一样。但是,当我尝试从一些外部URL请求数据时,它工作正常。以下是从外部资源请求数据的自定义代码:

@app.route('/api/someroute/')
def someroute():
    r = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    return r.json()

现在提交获取请求到someroute工作正常并按预期返回数据

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

我尝试了很多外部网址,每个网址都没有任何问题,只是在向网站提交请求时停止工作。

这个场景只是为了理解,我需要实现更复杂的东西,这就是为什么我必须向app自己的路线提交请求。不知道出了什么问题,坚持了很久。非常感谢任何帮助。

更新:启用线程并开始正常工作,请求关闭此问题 解决者:Using requests module in flask route function

1 个答案:

答案 0 :(得分:2)

之所以发生,是因为您的烧瓶服务器有一个线程。当您请求时,请求您处理的线程进程并且不能处理它在处理期间执行的另一个请求。

尝试使用不同的端口运行另一个进程并更改您的网址,它会起作用。此外,您可以使用--with-threads选项运行服务器。