我正在寻找一个python webserver,它是多线程的,而不是多进程的(如果是针对apache的mod_python).我希望它是多线程的,因为我希望有一个内存对象缓存,将由各种http线程使用.我的网络服务器做了很多昂贵的事情,并计算了一些需要缓存在内存中的大型数组,以备将来使用,以避免重新计算.这在多进程Web服务器环境中是不可能的.在memcache中存储这些信息也不是一个好主意,因为数组很大并且将它们存储在memcache中会导致来自memcache的数据的反序列化,而不是IPC的额外开销.
我使用BaseHttpServer实现了一个简单的Web服务器,它提供了良好的性能,但在几个小时后就会卡住.我需要一些更成熟的网络服务器.是否可以配置apache在线程模型下使用mod_python,以便我可以进行一些对象缓存?
CherryPy.功能,从网站上列出:
一个快速的,符合HTTP/1.1标准的WSGI线程池网络服务器.通常,CherryPy本身每页只需1-2毫秒!
支持任何其他启用WSGI的Web服务器或适配器,包括Apache,IIS,lighttpd,mod_python,FastCGI,SCGI和mod_wsgi
易于同时运行多个HTTP服务器(例如,在多个端口上)
适用于开发人员和部署人员的强大配置系统
灵活的插件系统
内置工具,用于缓存,编码,会话,授权,静态内容等等
本机mod_python适配器
一个完整的测试套件
可交换和可定制......一切.
内置的分析,覆盖和测试支持.
考虑重新考虑您的设计.在您的网络服务器中保持这么多状态可能是一个坏主意.多进程是一种更好的稳定方法.
还有另一种在不同进程之间共享状态的方法吗?服务怎么样?数据库?指数?
在内存中维护大量数据并依靠单个多线程进程来满足您的所有请求似乎不太可能是您的应用程序的最佳设计或架构.
Twisted可以作为这样的Web服务器.虽然本身没有多线程,但当前主干中存在一个(尚未发布的)多线程WSGI容器.您可以查看SVN存储库,然后运行:
twistd web --wsgi=your.wsgi.application