首页 > 解决方案 > 如何与龙卷风 IOLoop 同时运行长时间运行的阻塞功能

问题描述

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

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

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

如何让长时间运行的任务同时运行?

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

我试过这个:

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

由于我从不等待 Future 它似乎没有运行该功能,因此我对执行此操作的“正确”方法有些困惑。

标签: python-3.xredistornado

解决方案


我必须将对 redis 对象和 pubsub 对象的引用存储在一个不会被垃圾收集的类中。此外,pubsub 的 run_in_thread 方法也很有帮助!


推荐阅读