Flask:服务器没有响应内部API访问

时间:2017-08-17 05:03:55

标签: python rest api flask

我正在尝试使用flask开发Web应用程序,下面是我的代码,

from sample import APIAccessor
#API
@app.route('/test/triggerSecCall',methods=['GET'])
def triggerMain():
    resp = APIAccessor().trigger2()
    return Response(json.dumps(resp), mimetype='application/json') 

@app.route('/test/seccall',methods=['GET'])
def triggerSub():
    resp = {'data':'called second method'}
    return Response(json.dumps(resp), mimetype='application/json') 

我的触发器方法包含以下代码,

def trigger2(self):
      url = 'http:/127.0.0.1:5000/test/seccall' 
      response = requests.get(url) 
      response.raise_for_status()
      responseJson = response.json()
      if self.track:
          print 'Response:::%s' %str(responseJson)
      return responseJson

当我点击http://127.0.0.1:5000/test/seccall时,我得到了预期的输出。当我点击/test/triggerSecCall时,服务器停止响应。请求永远等待。 在此阶段,我无法从任何其他REST客户端访问任何api。当我强制停止服务器(Ctrl + C)时,我在second REST客户端获得响应。

为什么烧瓶无法服务于内部服务电话?

1 个答案:

答案 0 :(得分:1)

我猜您使用的是单线程开发服务器,而不是WSGI设置用于生产。

由于服务器只有一个线程,因此一次只能处理一个请求。第一个请求将被执行,导致requests.get(...)将打开第二个请求,在第一个请求完成之前无法处理,这是一个死锁。

最好的解决方案是调用triggerSub()来获取结果,而不是使用HTTP请求。