【发布时间】:2023-11-21 10:59:01
【问题描述】:
我有一个 tornado 应用程序,我们有两个 API 的 /health 和 /make 调用 /make API 需要 10 分钟来构建所需的资源并将其加载到内存中,在此期间调用 /health 被阻止,因为服务器被标记为不健康。构建 /health API 的更好方法是什么。
【问题讨论】:
我有一个 tornado 应用程序,我们有两个 API 的 /health 和 /make 调用 /make API 需要 10 分钟来构建所需的资源并将其加载到内存中,在此期间调用 /health 被阻止,因为服务器被标记为不健康。构建 /health API 的更好方法是什么。
【问题讨论】:
我相信将阻塞进程移动到新线程中的最简单、最类似于龙卷风的方法是使用 tornados subprocess impl。此处描述:https://www.tornadoweb.org/en/stable/process.html#tornado.process.Subprocess
简而言之:这个想法是在一个新线程中启动build 进程,其中I/O 像任何其他非阻塞I/O 资源一样添加到IOLoop。实际上,新进程(子进程/子进程)与主要的龙卷风进程完全分离,但它的接口隐藏了这一事实。
【讨论】:
move long blocking operations from the main thread into a separate thread/pools/Celery/etc 是一种很好且广泛的做法(出于某种原因)。如果您在资源构建中这样做,您的带有/health 的主线程将被解除阻塞并且可用。
【讨论】: