[英]Getting Python HttpServer response instantly
我在服务器端使用Python HttpServer
。 一个GET
请求将花费更多时间来响应,并且我想更新用户的当前状态,例如'Fetching module X. Please wait'
, 'Fetching module Y. Please wait'
。
但是,即使我在模块之间发送它,也不会在客户端进行更新。 我曾尝试冲洗河流,但没有运气。
self.wfile.write('Fetching module X. Please wait')
self.wfile.flush()
如何强制HttpServer
立即发送信息,而不是等待完整响应的完成?
您可以使用python线程
from threading import Thread
t = threading.Thread(target=function to be call, args=[request])
t.setDaemon(False)
t.start()
此代码将强制立即返回响应并在后台运行您的函数。
建议您将user indication
放在header
而非body
。 然后,您可以使用stream
来满足您的要求。
注意:下一个代码基于python2
,您可以根据需要更改http server related
python3 related api
http server related
。
server.py:
import BaseHTTPServer
import time
class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
Page = "Main content here."
def do_GET(self):
self.send_response(200)
self.send_header("Content-Type", "text/html")
self.send_header("Content-Length", str(len(self.Page)))
self.send_header("User-Information", "Fetching module X. Please wait")
self.end_headers()
time.sleep(10)
self.wfile.write(self.Page)
if __name__ == '__main__':
serverAddress = ('', 8080)
server = BaseHTTPServer.HTTPServer(serverAddress, RequestHandler)
server.serve_forever()
client.py:
import requests
r = requests.get('http://127.0.0.1:8080', stream=True)
print(r.headers['User-Information'])
print(r.content)
说明:
如果使用stream
,则header information
仍将由客户端立即获取,因此您可以使用print(r.headers['User-Information'])
一次将其print(r.headers['User-Information'])
给用户。
但是使用stream
, body information
将不会传输,它会延迟到客户端使用r.content
要求它时( Response.iter_lines() or Response.iter_content()
也可以),因此当您执行print(r.content)
,它需要10 seconds
看到的主要内容,因为它花费10s
的服务器代码。
输出:(第一行将立即显示给用户,但第二行将在10秒后显示给用户)
正在获取模块X。请稍候
主要内容在这里。
附上指南以供参考,希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.