有没有办法部分返回Python Web服务的结果....?

时间:2013-09-13 07:25:00

标签: python web-services flask partial

我是python的新手。我正在使用Flask创建一个Web服务,它可以向Linkedin发出大量的api调用。这样做的问题是获得最终结果集很多时间,并且前端在此时间保持空闲状态。我正在考虑返回到那时发现的部分结果,并继续在服务器端调用api。有没有办法在Python中做到这一点?感谢。

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。最简单的方法是立即通过flask返回初始请求,然后在您返回的页面上使用Javascript,向另一个URL发出额外请求,并在返回时加载。也许显示加载指示器或其他东西。

附加网址将如下所示

@app.route("/linkedin-data")
def linkedin():
    # make some call to the linked in api which returns "data", probably in json
    return flask.jsonify(**data)

从根本上说,没有。您无法返回部分请求。因此,您必须将您的请求分解为更小的单位。您可以使用websockets流式传输数据。但是你仍然会发回一个初始请求,然后使用Javascript创建一个websocket连接,然后开始将数据流回用户。

答案 1 :(得分:1)

Flask has the ability to stream data back to the client.有时this requires javascript modifications to do what you want但是可以使用flask和jinja2以块的形式向用户发送内容。它需要一些争吵,但它是可行的。

使用生成器分解内容的视图可能如下所示(尽管链接到SO的答案要全面得多)。

from flask import Response

@app.route('/image')
def generate_large_image():
    def generate():
        while True:
            if not processing_finished():
                yield ""
            else:
                yield get_image()
    return Response(generate(), mimetype='image/jpeg')