5

Python、BasicHTTPServer、およびSimpleHTTPServerを使用して、テスト目的で小さなWebサーバーを作成しています。一度に 1 つの要求を処理しているようです。あまり深くいじることなく、少し速くする方法はありますか? 基本的に、私のコードは次のようになります。このようにシンプルに保ちたいと思います;)

os.chdir(webroot)
httpd = BaseHTTPServer.HTTPServer(("", port), SimpleHTTPServer.SimpleHTTPRequestHandler)
print("Serving directory %s on port %i" %(webroot, port) )
try:
 httpd.serve_forever()
except KeyboardInterrupt:
 print("Server stopped.")
4

3 に答える 3

9

SocketServerからの mixin 継承を使用して、独自のスレッドまたはフォーク クラスを作成できます。

import SocketServer
import BaseHTTPServer

class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
    pass

これには、スレッド プールを使用しない、GIT などによって制限されるなどの制限がありますが、(比較的少ない労力で) 少しは役立つ可能性があります。リクエストは複数のスレッドによって同時に処理されることに注意してください。そのため、リクエストを処理する過程でグローバル/共有データへのアクセスを適切にロックするようにしてください (そのようなデータが起動後に不変でない限り)。

このSOの質問は同じ根拠をカバーしています(特に長さではありません)。

于 2010-03-16T15:39:11.900 に答える
1

また、 CherryPyを見ることもできます。これも非常にシンプルで、追加の労力を必要とせずに複数のリクエスト スレッドを使用できます。あなたのニーズは今はささやかなものかもしれませんが、CP には将来役に立つかもしれない多くの優れた機能があります。

于 2010-03-16T16:58:06.803 に答える
0

要件によっては、別のオプションとしてPasteをフックすることもできます。ただし、あなたの例に基づいて、それはやり過ぎかもしれません。ツールボックスに常備しておきたいアイテム。

于 2010-03-16T15:49:28.377 に答える