Cherrypy多线程示例

6 投票
1 回答
4193 浏览
提问于 2025-04-16 00:43

我知道cherrypy是一个支持多线程的框架,并且它还有一个线程池的实现。
所以我想试试一个例子,看看它是如何处理多线程的。
假设我在根类中有一个函数,其他的配置都已经设置好了。

def testPage(self, *args, **kwargs):
    current = threading.currentThread()
    print 'Starting ' , current
    time.sleep(5)
    print 'Ending ' ,current
    return '<html>Hello World</html>'

现在假设我在浏览器的3-4个标签页中运行我的页面,地址是 http://localhost:6060/root/testPage
我得到的结果是

Starting <WorkerThread(CP WSGIServer Thread-10, started 4844)>
Ending <WorkerThread(CP WSGIServer Thread-10, started 4844)>
Starting <WorkerThread(CP WSGIServer Thread-7, started 4841)>
Ending <WorkerThread(CP WSGIServer Thread-7, started 4841)>
Starting <WorkerThread(CP WSGIServer Thread-10, started 4844)>
Ending <WorkerThread(CP WSGIServer Thread-10, started 4844)>

我能清楚地看到,每当有新的请求时,它都会创建新的线程来处理这些请求,但我搞不明白的是,为什么我每次看到的输出是
开始...结束...开始...结束...
而不是有时候出现开始...开始...结束...结束...
因为我认为time.sleep会让某个线程暂停,这样其他线程就可以在这个时候执行。

1 个回答

2

这很可能是你浏览器的限制,而不是CherryPy的问题。比如说,Firefox 2这个浏览器最多只能同时向同一个网站发起2个请求,即使你打开了多个标签页。如果每个标签页还在请求一个小图标(favicon)的话,那就只剩下一个请求可以同时发送给你的处理程序了。

你可以查看这个链接 http://www.cherrypy.org/ticket/550,里面有类似的源代码和更详细的说明。

撰写回答