PyZMQ 是否处理为每个新客户端连接创建线程?

2024-04-26

我正在使用 PyZMQ 创建请求/回复服务器,并且我试图弄清楚为每个新客户端连接创建线程的行为是否由 PyZMQ 自动处理。最终,我试图弄清楚来自一个客户端的请求需要很长时间才能回复,是否会阻止来自所有其他客户端的请求。

通常,我会在 Python 套接字实例上调用accept,阻塞直到建立新连接,并在单独的线程中处理任何新连接。然而,PyZMQ 套接字似乎不支持这样的工作流程。那么,PyZMQ 中是如何处理的呢?如果 PyZMQ REP 套接字有多个客户端连接到它,它如何正确地将回复路由回发出请求的客户端?而且,我如何设计我的代码,以便当客户端发出长时间运行的请求时,来自其他客户端的请求不会被阻止?

我知道我可以使用 PyZMQ 提供的基于 Tornado 的 EventLoop,我只是想更好地理解如果这不是一个选项的话它将如何工作。


ZeroMQ 被公开为“类固醇套接字”,但还有另一种实现通信的方法。

首先,忘记传统套接字中连接对等点的电线。在 0mq 中,您有一个“量子传送器”,它将您的消息从一段代码传递到另一段代码,对您隐藏实际的传递工作。您不能只询问 0mq 有多少客户端连接到套接字或是否有客户端。因此,ZeroMQ 不能用作套接字的直接替代品。

相反,0mq 会给你一顶魔术师帽子,你可以从中拿走一些小白兔。想象一下,帽子的底部与一个巨大的管道网络相连,另一侧有多个工厂,生产着奇妙的东西。这些工厂有时会寄一些东西到你的帽子上,当你从帽子里拿出来时,你会发现自己手里拿着一只兔子,或者一束鲜花或其他东西。您无法确定该物品是从哪个工厂发送的,除非该物品上有明确的标签(即多部分消息的一部分指向消息的来源)。

在你从帽子里取出兔子后,你可能想发回一些东西,0mq 对于不同的套接字类型会有不同的行为。对于 REP 套接字,它将直接向消息源发送应答,对于 DEALER 来说,它将在连接的对等点之间循环应答,而 ROUTER 在接收消息时让您了解对等点的确切内部地址,并允许您在发送消息时设置显式目的地。

总而言之,如果您希望每个通信客户端都有一个单独的线程,则需要以下内容:

  • 客户应明确表明自己的身份。
  • 在服务器上,您运行一个线程(调度程序)来接收消息,从中获取客户端身份并选择一个线程进行处理。
  • 调度程序将此消息发送到线程(或生成一个线程)并继续为传入消息流提供服务。
  • 线程接收消息,处理它并通过调度程序将答案发送给客户端(如果需要)。
  • 调度程序将应答路由给客户端。

这是一种利用经典套接字知识实现“zeromq 上的多客户端套接字服务器”的方法。

但这不是解决问题的 0mq 方法。

在 0mq 中,您可以将处理逻辑放在一个线程中(上面示例中的调度程序)并将其实现为一个循环receive request -> process -> send answer -> receive ...。当处理时间不成问题时,非常适合。但当它出现时,0mq 式的解决方案涉及客户端和工作人员(执行实际工作)之间的任务队列代理。然后,代理逻辑比上面提到的接收-应答循环稍微复杂一些,并且工作器以相同的方式实现。请参阅 zguide 中的示例 -请求-回复消息代理 http://zguide2.zeromq.org/py%3aall#toc53

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyZMQ 是否处理为每个新客户端连接创建线程? 的相关文章

  • PUB-SUB 的 ZMQ 延迟(慢订阅者)

    我发现了很多关于类似主题的问题 但它们并没有帮助我解决我的问题 Using Linux Ubuntu 14 04 蟒蛇3 4 zmq 4 0 4 pyZMQ 14 3 1 TL DR 即使设置了 HWM ZMQ SUB 套接字中的接收器队列
  • PHP ZMQ 扩展:无法加载动态库

    我正在 Windows 10 上开发 Wampserver 我正在使用名为 ZMQ 的扩展 我从以下位置下载了 DLLS https pecl php net package zmq 1 1 3 windows https pecl php
  • 无回复请求的 ZMQ 模式

    我使用 ZMQ 允许客户端连接到服务器并向其发送命令 命令传入的频率很高 不需要任何回复 我正在考虑使用 REQ REP 套接字 但发送空回复感觉很浪费 我不想使用 PUB SUB 或 PUSH PULL 因为我希望客户端启动连接 是否有比
  • ZeroMQ (clrzmq4) 轮询问题

    我想要完成的是实现从两个套接字之一读取消息 无论消息首先到达何处 据我了解轮询 zmq poll 是正确的做法 如指南中的 mspoller http zguide zeromq org cs mspoller 在这里我将提供小的伪代码片段
  • Pyinstaller 运行具有 pyzmq 依赖项的脚本时出错

    这是我的第一篇 StackOverflow 帖子 我在创建具有 pyzmq v22 0 2 依赖项的 pyinstaller v4 2 可执行文件时遇到问题 我通过运行 pyinstaller main py 创建了一个可执行文件 dist
  • 如何使用 Zeromq 的 inproc 和 ipc 传输?

    我是 ZERMQ 的新手 ZeroMQ 具有 TCP INPROC 和 IPC 传输 我正在寻找在 Winx64 和 python 2 7 中使用 python 和 inproc 的示例 这些示例也可以用于 Linux 另外 我一直在寻找
  • 使用 ipcluster 从从节点读取标准输出

    我已经使用设置了一个集群 ipcluster start n 8 然后使用访问它 from IPython parallel import Client c Client dview c e i for i in c 我正在从属节点 e 0
  • 为分布式系统构建数据收集和监控的中间件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在寻找一个好的中间件来构建监控和维护系统的解决方案 我们面临的挑战是监控 收集数据并维护由多达
  • Python 多处理问题?

    我有一个包含 500 个输入文件的文件夹 所有文件的总大小约为 500 MB 我想写一个python执行以下操作的脚本 1 将所有输入文件加载到内存中 2 初始化一个空的python稍后将使用的列表 参见项目符号 4 3 启动 15 个不同
  • ipc:// 上的 ZeroMQ REQ/REP 和并发性

    我使用 REQ REP 0MQ ipc 套接字实现了一个 JSON RPC 服务器 我遇到了奇怪的行为 我怀疑这是由于 ipc 底层 unix 套接字不是真正的套接字 而是一个事实一根管子 根据文档 必须强制执行严格的 zmq send z
  • ZeroMQ:重新绑定套接字时地址使用错误

    将 ZeroMQ 套接字绑定到端点并关闭套接字后 将另一个套接字绑定到同一端点需要多次尝试 之前的调用zmq bind直到成功失败并出现错误 地址正在使用 EADDRINUSE 下面的代码演示了这个问题 include
  • php-zmq 未显示在 phpinfo() 页面上

    我在 Windows 上使用 Wamp Server 并安装了 zmq 库 当我在控制台上编写 php info 时 我看到 zmq 显示为已安装 zmq ZMQ 扩展 gt 已启用 ZMQ 扩展版本 gt 1 1 2 libzmq 版本
  • jeromq 生产准备好了吗?

    我过去曾通过 JVM 应用程序使用 ZeroMQjzmq图书馆 我计划在一个新项目中使用 Zeromq 其中一些服务是在 JVM 上实现的 我刚刚发现jeromq https github com zeromq jeromq 一个 Zero
  • 负载测试 ZeroMQ (ZMQ_STREAM) 以查找它可以处理的最大并发用户数

    有没有人有任何实际场景对 ZMQ 套接字进行负载测试以获得最大数量 他们可以处理的 并发用户 不是吞吐量 看起来 ZeroMQ 在 FD 限制方面存在一些严重问题 场景是 有许多 Web 服务器框架吹嘘它们可以处理数百万个并发用户 现在 如
  • 如何使 Zeromq PUB/SUB 删除旧消息而不是新消息(用于实时提要)?

    说我有一个PUB服务器zmq send 的实时消息SUB客户 如果客户很忙而无法zmq recv 消息足够快 那么消息将在客户端 和 或服务器 中缓冲 如果缓冲区变得太大 高水位线 则新消息将被丢弃 对于实时消息来说 这与人们想要的相反 应
  • 应用程序在 iOS 6 上崩溃:找不到符号:___sync_fetch_and_add_4

    我有一个与 iOS4 和 iOS5 完美配合的应用程序 它使用针对 ARM 的 Zeromq 库的静态编译版本 Apple 拒绝了我的应用程序 因为他们声称它在 iOS 6 下崩溃 尚未发布 wth 在使用 iOS 6 GM 尝试之后 我可
  • ZeroMQ套接字在什么情况下会丢弃或无法传递消息?

    是否有某种规范或其他解释来描述正常情况 对于每种通信类型 您可以预期在 ZeroMQ 套接字上发送的消息不会被 所有 侦听进程接收 例如 我有一个实验程序 它基本上假设所有订阅者PUB套接字接收在该套接字上发送的所有消息 在初始化握手之后
  • 如何将扩展 PUB-SUB 模式中的发布者和订阅者与 C++ 中 ZeroMQ 中的中介同步?

    Extended PUB SUB topology https i stack imgur com GEgpx png 我在一个有 1 个中介的用例中有多个发布者和多个订阅者 在 ZeroMQ 指南中 我了解了如何使用额外的方法来同步 1
  • 创建的线程数超出预期

    你可以找到该程序here https pastebin com H5fq732a 我正在消息传递框架 0MQ 中构建一个程序 我尝试执行我发布的内容here https stackoverflow com questions 4409620
  • Python 3.6 ZeroMQ (PyZMQ) asyncio pub sub Hello World

    我刚刚开始使用 ZeroMQ 我正在尝试让 Hello World 在 Python 3 6 中与 PyZMQ 和 asyncio 一起使用 我试图将模块的功能与发布 订阅代码分离 因此有以下类设置 Edit 1 最小化示例 Edit 2

随机推荐

  • Python中的非阻塞套接字?

    是我 还是我找不到关于Python中非阻塞套接字的好教程 我不确定如何准确地工作 recv和 send在里面 根据 python 文档 至少是我的理解 recv ed or send ed 数据可能只是部分数据 那么这是否意味着我必须以某种
  • 数组对象内相同值的重复分组

    id year 2017 month 4 Confirm 0 id year 2017 month 4 Expired 25 id year 2017 month 4 Pending 390 id year 2017 month 5 Pen
  • 构建启用 COM 互操作的项目,而无需在构建过程中注册它

    在 Visual Studio 2010 中 我尝试构建一个启用 COM 互操作的 C 项目 但在构建过程中不注册它 但我DO需要程序集的类型库 tlb 文件 因此我可以从解决方案中的另一个 C 项目导入它 我还没有找到一种方法来做到这一点
  • KafkaStreams 同一应用程序中的多个流

    我正在尝试根据 KafkaStreams 的惯例和合理性做出实用的设计决策 假设我想将两个不同的事件放入其中KTables 我有一个制作人将这些消息发送给KStream那就是听那个话题 据我所知 我不能对消息使用条件转发KafkaStrea
  • 如何将函数应用于嵌套列表?

    我需要获取嵌套列表中变量的最大值 对于某个站号 s 和某个成员 m mylist s m 其形式为 station date time member bias 6019 2011 08 06 12 00 mbr003 86 6019 201
  • URLError:

    只是想让这段代码直接运行它的基本代码Python 金融 import datetime import matplotlib pyplot as plt from matplotlib finance import quotes histor
  • 复制/粘贴到 Word 时如何保留 rstudio 的格式?

    我想在 Word 2010 中重现我的代码 脚本是用 rstudio 编写的 我想在粘贴到 Word 时保留 rstudio 的格式 主要是 我喜欢 rstudio 使用的字体颜色和间距 我发现当我从 SAS 粘贴到 Word 时 格式会被
  • 如何为pandas数据框中的不同组分配唯一的ID?

    如何根据特定条件为 pandas 数据框中创建的组分配唯一 ID 例如 我有一个名为 df 的数据框 其结构如下 名称标识用户 日期时间标识用户访问资源的日期 时间 Name Datetime Bob 26 04 2018 12 00 00
  • 未找到 Firebase 框架

    我一直在尝试将我的项目迁移到 cocoapods 我觉得我快到了 但我陷入了困境 ld 找不到架构 x86 64 的 Firebase 框架 错误 链接器命令失败 退出代码为 1 使用 v 查看调用 我正在尝试使用我的 app xcwork
  • SwiftUI 预览的 Xcode Canvas 不显示

    我正在尝试从 Xcode 11 运行新的 Canvas 功能 但 Canvas 不会显示 我究竟做错了什么 这个新的 Xcode 功能应该在不运行应用程序的情况下显示我的 SwiftUI 视图的实时预览 当您使用 SwiftUI 创建自定义
  • 图像调整大小性能:System.Drawing 与 System.Windows.Media

    我遇到了需要调整大量图像大小的情况 这些图像目前在文件系统上存储为 jpg 文件 但我希望稍后在项目中内存中只有 byte 源图像大小是可变的 但输出应该是 3 个不同的预定大小 应保留长宽比 用空白填充原始图像 即 将调整非常高的图像大小
  • 未知处理时间的进度条

    我正在开发启动 停止 重新启动 Windows 服务的 winform c 我想放置一个进度条 直到操作完成 我是 net 编程新手 请帮助我实现这一目标 当您不知道需要多长时间时 您就无法展示有意义的进展 您无法知道 服务启动需要 1 到
  • 使用 Postman 获取并存储 cookie 的值 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要获取 cookie 的值 该值仅在我在邮递员中发送请求时创建 我已经尝试了一切 但我不知道如何实现这一目标 我还需要存储该值以便在我的
  • 根据具体数据计算锯齿波和三角波

    我需要计算三角形和锯齿波 但由于我的模型和我能够使用的数据 它有点复杂 但也许我只是感到困惑 我能够计算我的正弦波 但我并没有真正使用帧计数器 我所做的是 计算theta increment下次需要计算样本时可以使用的变量 这工作起来是这样
  • 根据时间变量对两个表中的一对 COUNT 求和

    花了一个多小时的时间寻找这个问题的答案 但运气不佳 我有两个具有相同列名的区域表 我可以根据以下查询为任一表提供结果列表 将 Table2 替换为 Table1 SELECT Table1 YEAR FORMAT COUNT Table1
  • GitHub Actions 工作流程不响应其他工作流程中的推送事件

    我创建了一个工作流程 在推送分支 A 时自动将分支 A 合并到分支 B 中 并创建了一个在推送分支 B 时运行的工作流程 但是 当推送分支 B 时 工作流不会运行 这是 GitHub 规范吗 如果是这样 我想知道是否有文档或问题明确说明了这
  • 基于 GPO DisplayName 而不是 Id 备份 GPO

    因此 我正在备份域控制器的所有 GPO 我注意到 Backup GPO cmdlet 备份 GPOS 的方式非常不友好 默认情况下 它为每个以 ID 命名的 GPO 创建一个文件夹 该文件夹甚至与其 GPOID GUID 不匹配 这是一个示
  • AWS Elastic Beanstalk 无效的二进制包

    我正在致力于将项目从 Heroku 迁移到 AWS 部署后我不断收到错误消息 无效的 ELF 标头 我在使用 AWS Lambda 时发现了类似问题的帖子 但我不明白为什么 Elastic Beanstalk 中的二进制包会出现问题 Ela
  • 我需要异常排序 mysql 结果

    我正在尝试从当前日期开始对结果进行升序排序 这就是我现在使用的 SELECT FROM friends JOIN bdays ON bdays user friends friendname WHERE username userid OR
  • PyZMQ 是否处理为每个新客户端连接创建线程?

    我正在使用 PyZMQ 创建请求 回复服务器 并且我试图弄清楚为每个新客户端连接创建线程的行为是否由 PyZMQ 自动处理 最终 我试图弄清楚来自一个客户端的请求需要很长时间才能回复 是否会阻止来自所有其他客户端的请求 通常 我会在 Pyt