一个好的多线程Python网络服务器?
我在找一个用Python写的网络服务器,它是多线程的,而不是像Apache的mod_python那样是多进程的。我想要多线程的原因是,我需要一个内存中的对象缓存,这样不同的HTTP线程可以共享使用。我的网络服务器需要处理很多复杂的事情,还要计算一些大的数组,这些数组需要缓存到内存中,以便以后使用,避免重复计算。在多进程的网络服务器环境下,这种做法是行不通的。而把这些信息存储在memcache里也不太合适,因为数组很大,存储在memcache里会导致数据在取出来时需要重新解析,还会增加进程间通信的开销。
我用BaseHttpServer实现了一个简单的网络服务器,性能还不错,但运行几小时后就会卡住。我需要一个更成熟的网络服务器。请问能不能配置Apache,让它在多线程模式下使用mod_python,这样我就可以进行对象缓存了?
11 个回答
6
Twisted 可以用作一个网络服务器。虽然它本身不是多线程的,但在当前的开发版本中,有一个(还没有发布的)多线程WSGI容器。你可以查看SVN代码库,然后运行:
twistd web --wsgi=your.wsgi.application
7
考虑一下重新设计你的系统。让你的网页服务器保持那么多状态信息可能不是个好主意。使用多进程的方式会更稳定。
有没有其他方法可以在不同的进程之间共享状态呢?比如说使用一个服务?数据库?索引?
把大量的数据都放在内存里,并依靠一个单一的多线程进程来处理所有请求,这种设计似乎并不是最好的选择。
16
CherryPy 是一个轻量级的网络框架,网站上列出了它的一些特点:
- 它是一个快速的网络服务器,符合HTTP/1.1标准,使用了WSGI和线程池。通常情况下,CherryPy处理每个页面只需要1到2毫秒!
- 支持任何其他支持WSGI的网络服务器或适配器,比如Apache、IIS、lighttpd、mod_python、FastCGI、SCGI和mod_wsgi。
- 可以轻松地同时运行多个HTTP服务器(比如在不同的端口上)。
- 为开发者和部署者提供了强大的配置系统。
- 有一个灵活的插件系统,可以根据需要添加功能。
- 内置了缓存、编码、会话管理、授权、静态内容等多种工具,还有很多其他功能。
- 提供了原生的mod_python适配器。
- 有完整的测试套件,方便进行测试。
- 所有功能都可以互换和自定义,灵活性很高。
- 内置了性能分析、覆盖率和测试支持。