を使用してPythonWebサーバーCherryPyをベンチマークする場合、(7つの同時スレッド)で1500リクエスト/秒(私が期待するものについて)をサーバーできるのはなぜですか?ab
しかし-c 7
、それに変更する-c 8
と、25リクエスト/秒に低下します。Python 2.6を実行している4つのコアを備えた64ビットWindowsマシンで、numthreads = 10でCherryPyを実行しています(ただし、numthreads = 8または20を使用しても違いはありません)。
Python GILが問題の一部であると半信半疑ですが、最大8つの同時要求スレッドを取得した場合にのみ発生する理由がわかりません。4コアのマシンでは-c 4
、で変更される可能性があると思いますが、そうではありません。
web.pyに付属している1ファイルのCherryPyWebサーバーを使用しています。これが、テスト対象のWSGIアプリです。
from web.wsgiserver import CherryPyWSGIServer
def application(environ, start_response):
start_response("200 OK", [("Content-type", "text/plain")])
return ["Hello World!",]
server = CherryPyWSGIServer(('0.0.0.0', 80), application, numthreads=10)
try:
server.start()
except KeyboardInterrupt:
server.stop()
ab
7および8の並行スレッドの出力は次のとおりです。
C:\\> ab -n 1000 -c 7 http://localhost/
...
Concurrency Level: 7
Time taken for tests: 0.670 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 130000 bytes
HTML transferred: 12000 bytes
Requests per second: 1492.39 [#/sec] (mean)
Time per request: 4.690 [ms] (mean)
Time per request: 0.670 [ms] (mean, across all concurrent requests)
Transfer rate: 189.46 [Kbytes/sec] received
C:\\> ab -n 1000 -c 8 http://localhost/
...
Concurrency Level: 8
Time taken for tests: 7.169 seconds
Complete requests: 158
Failed requests: 0
Write errors: 0
Total transferred: 20540 bytes
HTML transferred: 1896 bytes
Requests per second: 22.04 [#/sec] (mean)
Time per request: 362.973 [ms] (mean)
Time per request: 45.372 [ms] (mean, across all concurrent requests)
Transfer rate: 2.80 [Kbytes/sec] received