gpt4 book ai didi

python - 使用 pyzmq 零拷贝共享数据

转载 作者:太空狗 更新时间:2023-10-30 00:07:39 26 4
gpt4 key购买 nike

在 python 中寻找有效的 IPC 解决方案时,我偶然发现了 zeromq;我有几个 python 进程需要在主进程中对来自 dict 的数据进行一些 cpu 密集型处理。这些工作进程只能从字典中读取,只有主进程可以更改字典。 dict 中的数据会发生变化,但会通过主进程以原子方式发生变化。

我最好有一 block 共享内存,所有工作进程都可以从中读取字典,不幸的是,这在 python 中似乎是不可能的。

使用像 redis 或 memcache 这样的缓存听起来有点矫枉过正(不想使用 TCP 和 pickling 来共享我已经在内存中某处以 native 格式存储的内容)。

因此,作为替代方案,我想使用 zeromq 将相关数据从 master dict 推送到使用 zeromq IPC 套接字的订阅工作人员。这意味着我(不幸的是)必须从 master dict 中序列化相关部分(使用 msgpack?),然后使用 zmq 消息推送它。我读到可以使用零拷贝来执行此操作,这样我就不会最终复制数据两次,如果我在我的 msgpacked 二进制字符串上使用 copy=False,这是自动发生的事情吗?这是解决我的问题的方法吗?或者你们有什么技巧可以更有效地解决这个问题吗?

谢谢!

马丁

最佳答案

是的,如果您使用 copy=False 发送您的 msgpacked 字节,发送过程将不会在内存中有额外的数据副本(同样适用于 copy 的接收方=False).

确保进行性能测试,因为更复杂的零复制机制的成本通常大于复制本身的成本,直到消息开始变得相当大(每条消息交叉约 10kB)。

另一种方法是您可以只使用内置多处理模块的 facilities for shared data .它不是最棒的,但对于相当简单的事情,它可以完成工作。

关于python - 使用 pyzmq 零拷贝共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com