在单独的线程中运行pyzmq应用程序

时间:2019-05-05 13:05:53

标签: python multithreading tornado python-asyncio

我有一个应用程序(Jupyter),我想在单独的线程中启动它。该应用程序使用PyZMQ和Tornado。当前,应用程序不会在单独的线程中执行,因为该线程没有“当前”事件循环。应用程序初始化功能的摘录:

 def initialize(self, argv=None):
      super(IPKernelApp, self).initialize(argv)
      if self.subapp is not None:
          return

      # register zmq IOLoop with tornado
      zmq_ioloop.install()

      self.init_blackhole()
      self.init_connection_file()
      self.init_poller()
      self.init_sockets()

我已将其更新为:

 def initialize(self, argv=None):
      super(IPKernelApp, self).initialize(argv)
      if self.subapp is not None:
          return
      # create a new event loop for the current thread
      io_loop = ioloop.IOLoop()
      io_loop.make_current()

      # register zmq IOLoop with tornado
      zmq_ioloop.install()

      self.init_blackhole()
      self.init_connection_file()
      self.init_poller()
      self.init_sockets()

这似乎有效。但是现在可能有2个事件循环。这是正确的方法吗?如何获取主线程的事件循环?

0 个答案:

没有答案