gpt4 book ai didi

python - 如何使用 ZeroMQ 从父进程中的多个线程收集数据,同时保持解决方案尽可能简单且可扩展?

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:15 25 4
gpt4 key购买 nike

父进程启动几十个接收数据的线程(最多几KB,每秒10个请求),这些数据必须收集在父进程的列表中。实现这一目标的推荐方法是什么?它是高效的、异步的、非阻塞的,并且更容易实现且开销最小?

ZeroMQ 指南建议使用 PAIR 套接字原型(prototype)来协调线程,但是
如何扩展几百个线程?

最佳答案

没有免费晚餐

即使某些营销方案提供了这一点,也不要认为这是理所当然的。

高效通常意味着复杂的资源处理。

最简单的实现通常会与开销和高效的资源处理作斗争。

<小时/>

最简单?

按照亨利·福特爵士的观点,设计中不存在的组件根本不会失败。

从这个意义上说,我们在这里努力不以编程方式控制任何超出智能 ZeroMQ 库的基本组件的最简单使用的东西:

<强> Scenario SIMPLEST:

Rule a)

中央HQ -unit(无论是一个线程还是完全隔离的进程) .bind() -s 它的接收端口(预设为 ZMQ_SUBSCRIBE 行为原型(prototype) )并“订阅”它的主题过滤器到“所有内容” .setsockopt( ZMQ_SUBSCRIBE, "" ) 在它产生第一个 DAQ 之前-{ 线程 |处理},进一步引用为 DAQ -单位

Rule b)

每个DAQ -unit 只是 .connect() -s 到 HQ 上已设置并准备就绪的端口- 具有单元本地套接字访问端口的单元,预设为 ZMQ_PUBLISH 行为原型(prototype)。

Rule c)

任意 DAQ -unit 只是 .send( ..., ZMQ_NOBLOCK ) -s 根据需要它是通过消息的本地数据,该消息在后台由 ZeroMQ 层传递到 HQ 的手中-unit,正在排队并可在 HQ 进行进一步处理-单位意志。

Rule d)

HQ -unit 定期循环和 .poll( 1 ) -s 表示存在从任何 DAQ 收集的消息-单位 + <强> .recv( ZMQ_NOBLOCK ) 以防出现任何此类情况。

仅此而已
Asynchronous :是的。
Non-blocking :是的。
Simplest :是的。
Scaleable :是的。 几乎是线性的,直到 I/O 限制
(仍然可以进行一些调整来处理压力 I/O 操作) 作为奖励积分...

关于python - 如何使用 ZeroMQ 从父进程中的多个线程收集数据,同时保持解决方案尽可能简单且可扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36593464/

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