【问题标题】:Health Check API blocked due to single IOLoop由于单个 IOLoop 导致运行状况检查 API 被阻止
【发布时间】:2023-11-21 10:59:01
【问题描述】:

我有一个 tornado 应用程序,我们有两个 API 的 /health 和 /make 调用 /make API 需要 10 分钟来构建所需的资源并将其加载到内存中,在此期间调用 /health 被阻止,因为服务器被标记为不健康。构建 /health API 的更好方法是什么。

【问题讨论】:

    标签: python tornado ioloop


    【解决方案1】:

    我相信将阻塞进程移动到新线程中的最简单、最类似于龙卷风的方法是使用 tornados subprocess impl。此处描述:https://www.tornadoweb.org/en/stable/process.html#tornado.process.Subprocess

    简而言之:这个想法是在一个新线程中启动build 进程,其中I/O 像任何其他非阻塞I/O 资源一样添加到IOLoop。实际上,新进程(子进程/子进程)与主要的龙卷风进程完全分离,但它的接口隐藏了这一事实。

    【讨论】:

      【解决方案2】:

      move long blocking operations from the main thread into a separate thread/pools/Celery/etc 是一种很好且广泛的做法(出于某种原因)。如果您在资源构建中这样做,您的带有/health 的主线程将被解除阻塞并且可用。

      【讨论】:

        最近更新 更多