【发布时间】:2019-01-11 10:42:00
【问题描述】:
我正在寻找有关以下方面的建议或相关教程:
我的任务是设置一个烧瓶路由,该路由 POST 到 API endpoint X,在 X 的响应中接收一个新的 endpoint Y,然后从 endpoint Y 获取 重复,直到在 Y 的响应正文中收到某个状态消息,然后返回 Y 的响应。
下面的代码(已编辑无关数据) 以一种非常愚蠢的方式实现了该目标。它偶尔会返回适当的数据,但并不可靠。 (60% 的时间它会超时。)当我非常彻底地控制台日志时,似乎我的服务器陷入了困境,多个 while 循环不断运行,相互干扰。
我偶尔也会收到此错误:
SIGPIPE:根据请求 /book 写入已关闭的管道/套接字/fd(可能客户端已断开连接)
import sys, requests, time, json
from flask import Flask, request
# create the Flask app
app = Flask(__name__)
# main booking route
@app.route('/book', methods=['POST']) #GET requests will be blocked
def book():
# defining the api-endpoints
PRICING_ENDPOINT = ...
# data to be sent to api
data = {...}
# sending post request and saving response as response object
try:
r_pricing = requests.post(url = PRICING_ENDPOINT, data = data)
except requests.exceptions.RequestException as e:
return e
sys.exit(1)
# extracting response text
POLL_ENDPOINT = r_pricing.headers['location']
# setting data for poll
data_for_poll = {...}
r_poll = requests.get(POLL_ENDPOINT, data = data_for_poll)
# poll loop, looking for 'UpdatesComplete'
j = 1
poll_json = r_poll.json()
update_status = poll_json['Status']
while update_status == 'UpdatesPending':
time.sleep(2)
j = float(j) + float(1)
r_poll = requests.get(POLL_ENDPOINT, data = data_for_poll)
poll_json = r_poll.json()
update_status = poll_json['Status']
return r_poll.text
【问题讨论】: