python-3.x - 如何与 Tornado IOLoop同时运行长时间运行的阻止功能

标签 python-3.x redis tornado

我有一个 Tornado 应用程序:

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

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

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

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

我尝试了这个:
tornado.ioloop.IOLoop.current().run_in_executor(None, redis_pubsub.subscribe_to_valid_tokens)

由于我从未等待过Future,因此它似乎没有运行该功能,因此我对执行此操作的“正确”方法有些困惑。
  • 我想知道是否应该使用单独的python线程(或者利用带有队列的多处理库?
  • 我应该使用更好的异步/等待结构吗?
  • 最佳答案

    我必须在不收集垃圾的类中存储对redis对象和pubsub对象的引用。另外,pubsub的run_in_thread方法非常有帮助!

    关于python-3.x - 如何与 Tornado IOLoop同时运行长时间运行的阻止功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62052360/

    相关文章:

    python-3.x - 为什么我的标准输入重定向 ('<' ) 不能与 subprocess.Popen() 一起使用?

    python - 无论我做什么都无法将数据 append 到文件

    php - 从 Laravel 中的命令调用 Controller 方法

    spring - 如何配置 Spring Integration 以使用多线程从 Redis 读取?

    python-3.x - 使用tornado.ioloop.IOLoop.run_in_executor时如何避免线程过多?

    python - TypeError : array([ 0.]) 不可 JSON 序列化

    python - python 网络服务器上打开的套接字数量不断增加

    python - 二维列表计算

    python-3.x - 如何将图像(base64编码)上传到firebase?

    ruby-on-rails - ActiveJob 未出现在 Sidekiq 队列中