Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Python3の標準ライブラリのみでCGI その2:多少の並行処理ができるようにする

前回の例では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にしておくことで