我有一个应用程序(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个事件循环。这是正确的方法吗?如何获取主线程的事件循环?