Предлагаем поставить user indication
на header
, а не body
.Затем вы можете использовать stream
для удовлетворения ваших требований.
ПРИМЕЧАНИЕ: Следующий код основан на python2
, вы можете изменить http server related
на python3 related api
, если хотите.
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'])
Но с stream
, body information
не будет передавать, оно будет отложено до тех пор, пока клиент не использует r.content
, чтобы потребовать его (Response.iter_lines() or Response.iter_content()
также нормально), поэтому, когда вы делаете print(r.content)
, ему потребуется 10 seconds
длясм. основное содержимое, как оно стоит 10s
в коде сервера.
Вывод: (Первая строка будет показана пользователю сразу, а вторая строка будет показана через 10 секунд)
Извлечение модуля X. Пожалуйста, подождите
Основное содержание здесь.
Приложите руководство для справки, надеюсь, этополезно.