簡體   English   中英

Flask + SSE:為什么需要time.sleep()?

[英]Flask + SSE : why is time.sleep() required?

我正在構建一個燒錄應用程序,它將具有后台進程(使用multiprocessing.Process )輪詢Web服務以獲取新數據,對數據進行排隊,以便Server-Sent-Events端點可以將其流式傳輸到客戶端。

示例代碼是這樣的:

#!/usr/bin/env python
from __future__ import print_function
import itertools
import time
from flask import Flask, Response, redirect, request, url_for

from multiprocessing import Process, Queue

def f(q):
    for i, c in enumerate(itertools.cycle('ABCDEFG')):
        time.sleep(1) 
        q.put( c )


app = Flask(__name__)

q = Queue()

@app.route('/')
def index():
    if request.headers.get('accept') == 'text/event-stream':
        def events():
            for i, c in enumerate(itertools.cycle('ABCDEFG')):
                #yield "data: %s \n\n" % (q.get())
                yield "data: %s \n\n" % (c)
                time.sleep(0.01)
        return Response(events(), content_type='text/event-stream')
    return redirect(url_for('static', filename='index.html'))


if __name__ == "__main__":
    p = Process(target=f, args=(q,))
    p.start()

    app.run(host='localhost', debug=True, port=23423)

    p.join()

問題是,在Chrome中,如果刪除time.delay(0.01)yield ,上證所似乎掛起(客戶端)。

time.sleep是必需的,因此您的客戶端不會被消息淹沒。 否則,Python循環將以可循環的速度連續發送消息。 正如您現在設置的那樣,客戶端每秒將收到大約100條消息(減去一些處理時間)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM