server.thread_pool, .
. , CherryPy - , - Python GIL. IO, , CherryPy . , , .
, . , , .
mp.py - CherryPy
import cherrypy
class App:
@cherrypy.expose
def index(self):
'''Make some traffic'''
return ('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean quis laoreet urna. '
'Integer vitae volutpat neque, et tempor quam. Sed eu massa non libero pretium tempus. '
'Quisque volutpat aliquam lacinia. Class aptent taciti sociosqu ad litora torquent per '
'conubia nostra, per inceptos himenaeos. Quisque scelerisque pellentesque purus id '
'vulputate. Suspendisse potenti. Vestibulum rutrum vehicula magna et varius. Sed in leo'
' sit amet massa fringilla aliquet in vitae enim. Donec justo dolor, vestibulum vitae '
'rhoncus vel, dictum eu neque. Fusce ac ultrices nibh. Mauris accumsan augue vitae justo '
'tempor, non ullamcorper tortor semper. ')
cherrypy.tree.mount(App(), '/')
srv8080.ini -
[global]
server.socket_host = '127.0.0.1'
server.socket_port = 8080
server.thread_pool = 32
srv8081.ini -
[global]
server.socket_host = '127.0.0.1'
server.socket_port = 8081
server.thread_pool = 32
proxy.conf - nginx config
upstream app {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
mp.py *.ini . *.conf nginx sites-enabled, . mp.py . cherryd -e production -i mp -c ./srv8080.ini, cherryd -e production -i mp -c ./srv8081.ini .
. (Linux Mint 15, Core i5 x2 + HT).
ab -c 1 -n 12800 -k http://127.0.0.1:8080/
ab -c 16 -n 12800 http://127.0.0.1:8080/
ab -c 32 -n 12800 http://127.0.0.1/