python - ZMQ 上下文套接字创建在新计算机上慢得多

标签 python c++ sockets zeromq pyzmq

这最初出现在 Python 中,但后来被复制到 C++ 中。这是提取并复制我的新笔记本电脑上的行为的单元测试。这些只是本地套接字连接。

def test_zmq_publisher_duration(self):
    max_duration = 1.0
    t0 = time.time()
    socket = zmq.Context.instance().socket(zmq.PUB)
    duration = time.time() - t0
    print(socket)
    self.assertLess(duration, max_duration, msg="socket() took too long.")

在其他计算机上,以及在我的旧笔记本电脑上,这只需要 几分之一秒 即可运行。但是,在我的新笔记本电脑(功能强大的 Dell Precision 7730)上,这需要大约 44 秒。创建 zmq.SUB(订阅者)套接字时,我得到了类似的结果。

如果我进入 socket() 调用,消耗所有时间的两个语句如下:

zmq/sugar/context.py
   class Context
      def instance(cls, io_threads=1):
         ...
         cls._instance = cls(io_threads=io_threads)
         ...

      def socket(self, socket_type, **kwargs)
         ...
         s = self._socket_class(self, socket_type, **kwargs)
         ...

我很困惑,也很困惑。笔记本电脑上的其他一切似乎都很好。也许我以某种稍微不同的方式pip 安装 我的依赖模块?以前安装的 zmq 模块与 pyzmq 是否会导致问题?也许是我们 IT 部门的笔记本电脑设置中的某些东西?我尝试过以管理员身份运行,从 PyCharm 中运行,从命令行运行,并在运行时拔下网络电缆。

我对 Python 和 ZMQ 比较陌生,但我们已经在这个项目上开发了几个月,没有出现任何性能问题。在生产代码中,我们有一个包含大部分发布/订阅架构的 MessageBroker 类。上面的单元测试是通过简单地从我们的 MessageBroker.Publisher 构造函数(它创建套接字)中拉出第一行重要的代码来创建的。尽管在这台计算机上创建套接字的速度很慢,但在创建套接字后,我们的应用程序仍会启动并正常运行。启动应用程序仅需 7 分钟。

我怀疑 Ed 的调试法则:“行为越奇怪,错误就越愚蠢。”

最佳答案

这显然是 Windows 10 或笔记本电脑固件问题。 IT 部门推送了一些更新,第二天一切正常。以下是根据事件查看器安装的项目:

  • 已安装 KB4456655:适用于 Windows 10 版本 1803 的服务堆栈更新:2018 年 9 月 11 日(稳定性改进)
  • 已安装 KB4462930:Adobe Flash Player 更新
  • 已安装 KB4100347:Intel 微代码更新
  • 已安装 KB4485449:Windows 10 v1803 的服务堆栈更新 - 2 月 12 日
  • 已安装 KB4487017:(与 KB4485449 的描述相同)
  • 已安装 KB4487038:Adobe Flash Player 安全更新

关于python - ZMQ 上下文套接字创建在新计算机上慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55033082/

相关文章:

c++ - 如何理解 "abstract-declarator containing an ellipsis shall only be used in a parameter-declaration"

c - 调用 bind() 时 AF_UNIX 套接字的正确长度

c# - 为什么即使没有服务器,socket.BeginConnect()总是成功

python - 有没有办法在python中的整数范围内设置列表值

python - 从 docker 容器发送唤醒局域网数据包

c++ - 如何在 CMake 中链接 SDL2?

c++ - 何时使用具有静态存储持续时间的右值引用?

python - 大括号内的 f 字符串公式不起作用

python - TypeError : expected str, 字节或 os.PathLike 对象,而不是 _io.BufferedReader

perl - 在 FTP 客户端套接字程序中获取连接被拒绝