加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 21:38:00 所属栏目:Python 来源:网络整理
导读:在 python中搜索IPC的有效解决方案时,我偶然发现了zeromq;我有几个python进程需要对来自主进程中的di??ct的数据进行一些cpu密集处理.这些工作进程只读取dict,只有主进程才能改变dict. dict中的数据会发生变化,但会通过主进程自动进行. 理想情况下,我有一块共
在 python中搜索IPC的有效解决方案时,我偶然发现了zeromq;我有几个python进程需要对来自主进程中的di??ct的数据进行一些cpu密集处理.这些工作进程只读取dict,只有主进程才能改变dict. dict中的数据会发生变化,但会通过主进程自动进行.

理想情况下,我有一块共享内存,其中所有工作进程都可以读取dict,不幸的是这在python中似乎不可能.

使用像redis或memcache这样的缓存听起来像是矫枉过正(不想使用TCP& pickling来分享我已经在内存中以原生格式存在的东西)..

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

谢谢!

马亭

解决方法

是的,如果您发送带有copy = False的msgpacked字节,则发送过程中将不会有额外的数据内存副本(对于接收方,copy = False也是如此).

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读