CherryPy和并发

Rad*_*Hex 2 python concurrency wsgi cherrypy

我正在使用CherryPy来通过WSGI为python应用程序提供服务.

我尝试对它进行基准测试,但似乎CherryPy只能处理10 req/sec.不管我做什么.

构建一个简单的应用程序,暂停3秒,以准确确定发生了什么......我可以确认10 req/sec与python脚本使用的资源无关.

__

有任何想法吗?

小智 26

默认情况下,CherryPy的内置HTTP服务器将使用具有10个线程的线程池.如果您仍在使用默认值,则可以尝试在配置文件中增加此值.

[global]
server.thread_pool = 30
Run Code Online (Sandbox Code Playgroud)

  • 你正在使用资源; 对于任何webapp,你都要保持套接字打开,它使用文件描述符和短暂的端口.在CherryPy中,每个子连接在其生命周期中都绑定到一个线程,因此您还使用其中一个工作线程(及其1MB堆栈大小和处理每个请求所需的任何堆对象).所以你有一个选择:1)增加线程数量,2)重新设计你的应用程序返回202接受并轮询答案(这也将释放套接字),或3)使用异步网络服务器(然后对抗延迟问题而不是吞吐量问题). (7认同)
  • CherryPy尝试设置合理的默认值,在我的笔记本电脑上产生大约1200 req/sec max.但是,那些基准请求每个都不需要3秒.你网站的现实应该在中间的某个地方; 如果你的真实请求每个需要3秒钟你可能做错了;) (2认同)
  • CherryPy根据需要增加了worker-thread的数量.`thread_pool = 10`是**初始**线程的数量. (2认同)