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

Python Flask:服务器对内部API访问没有响应,python,rest,api,flask,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(

我尝试使用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)时,我在
第二个
REST客户机中得到响应


为什么flask不能服务于内部服务呼叫

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

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


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

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

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


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

Yes!我也在打字。更多信息可以在这里找到:谢谢克劳斯和麦克里什。我认为让我的应用程序在多线程中运行将解决我的问题。它只是一个简单的应用程序,很少有人使用。好吧,它将是一个多线程运行服务器的解决方案,但这只会掩盖潜在的问题。如果您的web应用程序没有在一个线程中运行,则说明它有问题。多线程也会使调试复杂化。@MacMcIrish,这个链接非常有用。我将大胆地考虑在该线程中讨论的所有主题。如果您使用它来做其他事情,那么开发就使用WSGi安装程序。炮弹很简单,是的!我也在打字。更多信息可以在这里找到:谢谢克劳斯和麦克里什。我认为让我的应用程序在多线程中运行将解决我的问题。它只是一个简单的应用程序,很少有人使用。好吧,它将是一个多线程运行服务器的解决方案,但这只会掩盖潜在的问题。如果您的web应用程序没有在一个线程中运行,则说明它有问题。多线程也会使调试复杂化。@MacMcIrish,这个链接非常有用。我将大胆地考虑在该线程中讨论的所有主题。如果您使用它来做其他事情,那么开发就使用WSGi安装程序。炮弹可以简单地为它服务。