在新计算机上,ZMQ上下文套接字的创建要慢得多

时间:2019-03-06 22:19:15

标签: 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.")

在其他计算机和我的旧笔记本电脑上,运行时间为 fraction (秒)。但是,在我的新笔记本电脑(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类,其中包含大多数pub / sub体系结构。上面的单元测试是通过从我们的MessageBroker.Publisher构造函数(创建套接字)中简单地提取第一行代码来创建的。即使在此计算机上套接字创建很慢,在创建套接字之后,我们的应用程序仍然可以启动并正常运行。只需7分钟即可启动应用程序。

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

1 个答案:

答案 0 :(得分:0)

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

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