簡體   English   中英

可以將 python -m http.server 配置為處理並發請求嗎?

[英]Can python -m http.server be configured to handle concurrent requests?

我有一個與 http.server 一起提供的小型演示頁面。 我嘗試與我的同事共享,但發現 http.server 在任何打開的連接上仍然被阻止,因此無法為並發用戶提供服務。 有沒有辦法運行 http.server 來處理並發連接? 我在這里沒有發現任何有用的信息: https://docs.python.org/3/library/http.server.html

IIRC沒有現有的配置選項,但是如果您願意,可以使用socketserver.ThreadingMixin擴展一個:

import sys
import socketserver
import http.server


class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
    daemon_threads = True


port = int(sys.argv[1])
server = ThreadedHTTPServer(('', port), http.server.SimpleHTTPRequestHandler)
try:
    server.serve_forever()
except KeyboardInterrupt:
    pass

ps:有一個相關的python票證

您現在可以使用ThreadingHTTPServer

class http.server.ThreadingHTTPServer(server_address, RequestHandlerClass)

此 class 與 HTTPServer 相同,但使用線程通過 ThreadingMixIn 處理請求。 這對於處理 web 瀏覽器預打開 sockets 很有用,HTTPServer 將無限期等待。

3.7 版中的新功能。

ThreadingHTTPServer 不處理來自多個瀏覽器的並發請求,但有一種解決方法可以防止 HTTPServer 在每個實例中重新綁定其套接字(personal_cloud 回答):流式 HTTP 服務器支持一個端口上的多個連接(您必須修復導入, 和 append.encode() 到 write() 的每個字符串參數。)

使用這種方法,我的 Raspberry Pi 3B+ 可以 stream 將其相機作為一系列靜態 JPEG 圖像以每秒 30 幀的速度傳輸到 8 個同時瀏覽器(與 1 個用戶相同)。 這本質上是 MJPEG,並且比任何視頻編碼都低得多的延遲(<< 1 秒)。 相機使用~70%的核心,每個stream增加~2%; 8 個流在網絡上使用約 2.5 MB/秒。

暫無
暫無

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

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