我如何 运行 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' 的方法有点困惑。
- 我想知道我是否应该使用单独的 python 线程来执行此操作(或者利用带有队列的多处理库?
- 我应该使用 async/await 中更好的 use/structure 吗?
我必须将对 redis 对象和 pubsub 对象的引用存储在 class 中,而不会进行垃圾收集。此外,pubsub 的 run_in_thread 方法非常有用!
我有一个龙卷风应用程序:
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' 的方法有点困惑。
- 我想知道我是否应该使用单独的 python 线程来执行此操作(或者利用带有队列的多处理库?
- 我应该使用 async/await 中更好的 use/structure 吗?
我必须将对 redis 对象和 pubsub 对象的引用存储在 class 中,而不会进行垃圾收集。此外,pubsub 的 run_in_thread 方法非常有用!