python进程可以共享活动对象吗?

时间:2012-03-31 23:42:09

标签: python caching shared-memory

我有一个多进程python应用程序(进程由uwsgi生成),需要在RAM中存储变量,然后从几个不同的进程读取和更新这些变量。我知道有很多可用的缓存选项,但我发现的所有选项都只能存储字符串。不同的python进程是否可以访问相同的虚拟内存,从而共享数据而无需转换数据甚至复制数据?

1 个答案:

答案 0 :(得分:6)

除了POSH, Python Shared Objects,之外至少可以做你想做的事情的一部分(把Python对象放在SvsV-IPC共享内存中并从多个进程修改它们),并且可以作为开发你自己的扩展的起点模块以满足您对wsgi-spawned服务器进程的需求,Python世界中没有太多其他东西(我知道......)在进程之间共享时不依赖于pickle / unpickling对象。

另外还有一个问题是Pyro,它通过进程之间的任意网络连接进行共享(因此,也可以通过Unix-Domain套接字共享),并且在我自己的经验中比内置multiprocessing可以为(代理)对象管理提供什么。

您还可以看一下,您是否可以将驱动WSGI应用程序的Web服务器转为不分叉进程,而是使用线程;这样,您只需要为共享对象缓存使用标准Python全局数据,然后您可以从所有生成的WSGI处理程序线程访问它们。一个线程化的WSGI服务器就是例如CherryPy-builtin wsgiserver,我正在使用它来完成你正在拥有的项目。如果您使用worker MPM配置Apache(以便Apache线程,并且不分叉新进程),mod_wsgi也适用于您的上下文。

如果所有这些都不是一个选项,那么如何将您现在在Web服务器中执行的实际处理提取到外部进程,网页通过某种形式的RPC机制与之通信以推送工作请求和提取数据? “后端”处理服务器可以是一个简单的多线程Python进程,它通过标准库SimpleXMLRPCServer或类似的东西提供XML-RPC接口。