当在python中搜索IPC的高效解决方案时,我偶然发现了zeromq;我有几个python进程需要对主进程中的字典中的数据进行一些cpu密集处理。这些工作进程只能从字典中读取,只有主进程可以改变字典。字典中的数据将会改变,但通过主进程原子化。使用pyzmq zero-copy共享数据
我理想上有一段共享内存,所有的工作进程都可以读取字典,不幸的是,这似乎不可能在Python中。
使用Redis的一样或记忆快取缓存听起来有点小题大做(不想使用TCP &酸洗只是分享一些我已经在本机格式存储的地方)..
所以作为替代,我想使用zeromq将master dict中的相关数据推送到使用zeromq IPC套接字订阅工作人员。这意味着我会(不幸地)必须从master dict(使用msgpack?)序列化相关部分,然后使用zmq消息推送它。我读了它可以做到这一点使用零拷贝,所以我不会最终复制数据两次,这是自动发生的事情,如果我对我的msgpacked二进制字符串使用copy = False?这是为我的问题去的方式,还是你有提示如何更有效地解决这个问题?
谢谢!
的Martijn
感谢您的信息,可能会有消息> 10kB和<10kB,所以我将明确地必须做一些基准测试.. 是否有任何共识什么是最有效的方式之间的IPC进程之间的IPC是?只需使用多处理程序包并使用管道? – Martijnh
IPC有很多不同的方法,根据工作量的不同,各种工具具有不同的优势。我认为没有太大的共识,但是ZeroMQ比较流行。 – minrk