【发布时间】:2013-06-25 14:26:04
【问题描述】:
在 python 中寻找 IPC 的有效解决方案时,我偶然发现了 zeromq;我有几个 python 进程需要对来自主进程中的 dict 的数据进行一些 cpu 密集型处理。这些工作进程只从字典中读取,只有主进程可以更改字典。 dict 中的数据会发生变化,但会通过主进程以原子方式发生变化。
我最好有一块共享内存,所有工作进程都可以从中读取字典,不幸的是,这在 python 中似乎是不可能的。
使用像 redis 或 memcache 这样的缓存听起来有点矫枉过正(不想使用 TCP 和酸洗来分享我已经在内存中的某个地方以本机格式存储的东西)..
因此,作为替代方案,我想使用 zeromq 将相关数据从主 dict 推送到使用 zeromq IPC 套接字的订阅工作者。这意味着我(不幸的是)必须从主 dict 序列化相关部分(使用 msgpack?),然后使用 zmq 消息推送它。我读到可以使用零复制来执行此操作,这样我就不会最终复制数据两次,如果我在我的 msgpacked 二进制字符串上使用 copy=False 会自动发生这种情况吗?这是解决我的问题的方法还是你们有提示如何更有效地解决这个问题?
谢谢!
马丁
【问题讨论】:
标签: python multiprocessing ipc zeromq pyzmq