- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 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/
我最近开始使用 ZeroMQ 并观察到 有时,ZeroMQ 上下文的初始化可能需要多达 40 秒 .通常它比这快得多。 例如: import zmq # the next line will so
我有一些代码正在监视其他一些正在更改的文件,我想做的是启动使用带有不同套接字的 Zeromq 的代码,我现在这样做的方式似乎会导致 libzmq 中的某个地方断言失败,因为我可能会重复使用同一个套接字
我正在使用 PyZMQ 创建请求/回复服务器,并且我试图弄清楚为每个新客户端连接创建线程的行为是否由 PyZMQ 自动处理。最终,我试图弄清楚来自一个客户端的需要很长时间才能回复的请求是否会阻止来自所
我有以下发布者代码,它实例化一些类实例并发布一些消息。 但是,我在订阅者端没有收到任何内容。 发布商 import zmq import time from multiprocessing impor
我一直在想办法在我的套接字尚未连接到绑定(bind)地址时如何关闭 Context 实例(或者如果我需要的话)。这是我的演示代码: import zmq import json data = {} d
有人能给我指出一个带有 Python 绑定(bind)的 REQ/REP 非阻塞 ZeroMQ (0MQ) 的例子吗?可能是我对 ZMQ 的理解有问题,但是我在网上找不到例子。 我在 Node.JS
大家好 StackOverflow 的好人。 我正在使用 pyzmq,我有一些长时间运行的进程,这导致我发现套接字句柄处于打开状态。我已将有问题的代码缩小为以下内容: import zmq uri =
我有以下代码使用请求和回复模式从服务器发送数组到客户端, def send_array( socket, A, flags = 0, copy = True, track = False ): ""
我已经连接了 zeromq,“msg_in”已经排队。如果在该时间段内没有新消息队列来设置超时。如何设置超时。以下是核心代码 requestDict = {"id":111, "name":"test
我目前正在研究一些用 C 编写的模拟代码,这些代码在不同的远程机器上运行。当 C 部分完成后,我想通过使用 python 模拟 api 和某种作业队列系统扩展它来简化我的工作,它应该执行以下操作: 1
我对 PyZMQ 中的 HWM 行为感到困惑。我希望以下代码会被阻止 失败示例 In [1]: import zmq In [2]: context = zmq.Context() In [3]: a
我有一个ROUTER,其目的是积累来自多个DEALER客户端的图像数据并对完整图像执行OCR。我发现处理 OCR 最有效的方法是使用 Python 的多处理库;累积的图像字节被放入到队列中,以便在单独
我正在尝试使用 pyzmq 的内置日志处理程序(参见 here)为我的分布式应用程序实现集中式日志记录服务器。虽然从架构的角度我可以理解 PUB/SUB 模式的使用,但我无法掌握这种系统的正确技术实现
我正在尝试与通过 ZeroMQ 套接字开始使用 multiprocessing.Process 的子进程进行通信。我知道存在与 multiprocessing 模块内的子进程通信的解决方案,但我希望最
我想限制我的 ZeroMQ 消息队列在 Python 应用程序中消耗的内存量。我知道设置高水位线会限制在发送方排队的数量,但是有没有办法控制在接收方排队的数量? Python ZeroMQ 绑定(bi
在 python 中寻找有效的 IPC 解决方案时,我偶然发现了 zeromq;我有几个 python 进程需要在主进程中对来自 dict 的数据进行一些 cpu 密集型处理。这些工作进程只能从字典中
这是我的第一篇 StackOverflow 帖子! 我在创建具有 pyzmq (v22.0.2) 依赖项的 pyinstaller(v4.2) 可执行文件时遇到问题。我通过运行“pyinstaller
根据 ZeroMQ 文档,一旦排队的消息数量达到高水位线,pub 套接字就会删除消息。 这在以下示例中似乎不起作用(是的,我确实在绑定(bind)/连接之前设置了 hwm): import time
我第一次使用 python 中的 asyncio 并尝试将其与 ZMQ 结合起来。 基本上我的问题是我有一个 REP/REQ 系统,位于 async def 中具有我需要等待的功能。值如何不更新。下面
ZMQ socket documentation 中的 ZMQ_PUSH 部分假设在没有下游节点的 PUSH 套接字上调用 send() 应该阻塞,直到至少有一个节点可用。 但是,运行以下代码似乎不会
我是一名优秀的程序员,十分优秀!