前回の例ではhttp.serverの仕様上、リクエストを一個しか処理できません
そこで、複数処理ができるようにthreadingを使って逃げてみます
……pythonで並列処理ってあまりいい思い出が無いですけどね(白目
実際のところ
import http.server import socketserver import threading class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer): daemon_threads = True class CGIHandler(http.server.CGIHTTPRequestHandler): cgi_directories = ["/path/to"] # CGIスクリプトを配置しているディレクトリ with ThreadedHTTPServer(("", 8000), CGIHandler) as httpd: print("serving at port", 8000) httpd.serve_forever()
ThreadedHTTPServerは何をやっているのか
ForkingMixIn および ThreadingMixIn 配合クラス (mix-in classes) を使えば、非同期的な動作をサポートできます。
たとえば以下の例の場合、UDPServerを多重スレッド化できる模様。
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
更に、上の例のようにdaemon_threadsの変数を Trueにしておくことで