在简单情况下,您只需要按照问题评论中提到的方式管理
server.thread_pool
配置参数。
在实际情况下,这取决于许多因素。但我可以确定的是,CherryPy 是一个线程服务器,由于 Python 的
GIL,每次只运行一个线程。对于 I/O 密集型工作负载来说,这可能不是一个大问题,但您仍然可以利用 CPU 核心运行相同应用程序的多个 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配置文件
upstream app {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http:
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/
server.thread_pool
的配置是什么? - behzad.nouri