Мне любопытно, почему при тестировании веб-сервера Python CherryPy с использованием ab
, с -c 7
(7 одновременных потоков) он может обрабатывать 1500 запросов / с (о чем я и ожидал), но когда Я изменяю на -c 8
, он падает до 25 запросов / с. Я использую CherryPy с numthreads = 10 (но это не меняет дело, если я использую numthreads = 8 или 20) на 64-битной Windows-машине с четырьмя ядрами под управлением Python 2.6.
Я наполовину подозреваю, что Python GIL является частью проблемы, но я не знаю, почему это происходит только тогда, когда я получаю до 8 одновременно запрашивающих потоков. На четырехъядерном компьютере я могу ожидать, что он может измениться на -c 4
, но это не так.
Я использую однофайловый веб-сервер CherryPy, который поставляется с web.py , и вот приложение 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