我试图了解为什么服务器没有为第二个请求创建第二个线程:
from flask import render_template, redirect, url_for, jsonify
from . import pm
from .forms import NewForm
import requests, json
@pm.route('/pm/index')
def index():
return render_template('pm/index.html')
@pm.route('/pm/new', methods=['GET', 'POST'])
def newitem():
form = NewForm()
if form.validate_on_submit():
url = 'http://127.0.0.1:5000/api/search'
payload = {'some': 'data'}
r = requests.get(url)
print(r.status_code)
return redirect(url_for('material.index'))
return render_template('pm/new.html', form=form)
我有一个外部API,我希望在用户POST到@ pm.newitem之后发布信息
为了便于开发,端点被存根以访问我本地服务器上的端点,但它只是永久挂起。为什么会出现这种情况,如果端点在我手动测试时响应?
这个http://127.0.0.1:5000/api/search回应:
{
"results": [
{
"id": 1,
"name": "record"
},
{
"id": 2,
"name": "record2"
}
]
}
注意,如果我运行服务器的两个实例并将请求指向端口3000,则可以正常工作。
答案 0 :(得分:2)
我认为您已经回答了自己的问题。服务器是单线程的:如果您在请求中向自己发出请求,它将挂起,因为它无法完成原始请求。
运行两个实例会修复此问题,因为第二个cab会响应内部请求。