Cherrypy多线程示例
我知道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,里面有类似的源代码和更详细的说明。