【问题标题】:Can python processes share live objects?python进程可以共享活动对象吗?
【发布时间】:2012-04-15 04:23:09
【问题描述】:

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

【问题讨论】:

  • 查看processing 包。
  • 我已经检查了这两个。 sysv_ipc 只存储字符串,processing 不起作用,因为进程是由 uwsgi 生成的,而不是 python。

标签: python caching shared-memory


【解决方案1】:

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

另外一件我想到的事情是Pyro,它确实通过进程之间的任意网络连接共享(因此,也可以通过 Unix-Domain 套接字共享),并且根据我自己的经验,它比内置multiprocessing 可以提供(代理)对象管理。

您可能还需要了解的是,您是否可以让驱动您的 WSGI 应用程序的网络服务器不分叉进程,而是使用线程;这样,您只需将标准 Python 全局数据用于共享对象缓存,然后您就可以从所有衍生的 WSGI 处理程序线程中访问这些数据。例如,一个线程化的 WSGI 服务器是 CherryPy-builtin wsgiserver,我将它用于一个完全符合您需求的项目。 mod_wsgi 也适用于您的上下文,以防您使用工作 MPM 配置 Apache(以便 Apache 线程,并且不会派生新进程)。

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

【讨论】:

  • 我现在无法测试这个,因为我的电脑正在维修中,但我认为线程是我正在寻找的答案。我之前不清楚:服务器是uWSGI,我很确定它可以使用线程而不是分叉。我不知道这会如何影响性能,但这是另一个问题。
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2021-08-11
相关资源
最近更新 更多