我如何 运行 long 运行ning 阻塞函数与龙卷风 IOLoop 同时使用

How can I run a long running blocking function concurrently with tornado IOLoop

我有一个龙卷风应用程序:

if __name__ == "__main__":
    app = make_app()
    app.listen(8090)

    tornado.ioloop.IOLoop.current().start()

如何让一个长 运行ning 任务并发运行?

具体来说,我有一个 redis pubsub,它会通知我的 tornado 应用更新授权令牌。

我试过这个:

tornado.ioloop.IOLoop.current().run_in_executor(None, redis_pubsub.subscribe_to_valid_tokens)

因为我从不等待 Future,所以它似乎没有 运行 这个功能,所以我对 'correct' 的方法有点困惑。

我必须将对 redis 对象和 pubsub 对象的引用存储在 class 中,而不会进行垃圾收集。此外,pubsub 的 run_in_thread 方法非常有用!