Python/mod_wsgi 服务器全局数据
我一直在研究不同的系统,以便在运行Python/mod_wsgi的网络服务器上创建一个快速的缓存。Memcache和其他选项都是可以考虑的……但我在想:
因为我不需要在不同的机器之间共享数据,我希望每台机器都能维护一个本地缓存……
Python或WSGI有没有提供一种机制,可以让Apache中的Python本地共享数据,这样这些数据在服务器重启之前可以一直存在,并且对所有线程/进程都可用?这样我就可以在所有运行的应用实例的内存空间中保持一个带有并发控制的对象缓存了?
如果没有,这确实会很有用。
谢谢!
3 个回答
我知道这是一个老帖子,但这里有另一个“全服务器字典”的选择:http://poshmodule.sourceforge.net/posh/html/posh.html(POSH,Python共享对象)。声明一下:我自己还没用过这个。
这个问题在mod_wsgi的文档中有详细的说明,特别是在共享和全局数据部分。简单来说,就是:不可以,除非你把所有东西都放在一个进程里,但这样做并不是一个理想的解决方案。
需要注意的是,使用Beaker中间件来做缓存是非常简单的,它支持多种后端,包括memcache。
Django有一个线程安全的内存缓存后端,具体可以查看这里。这个缓存是基于cPickle的,虽然它是为Django设计的,但对Django其他部分的依赖很少,你可以很容易地对它进行修改,去掉这些依赖。显然,每个进程会有自己的缓存,线程之间可以共享这个缓存;如果你想要一个在同一台机器上所有进程都能共享的缓存,你可以在自己的进程中使用这个缓存,并选择一种进程间通信的方式(比如域套接字),或者在本地使用memcached
,如果你希望在重启后还能保留数据,可以考虑使用像Tokyo Cabinet这样的工具,并配合像这个的Python接口。