我继承了一个相当大的代码库,它利用 tornado 来计算和服务大而复杂的数据类型(想象一个 1 MB 的 XML 文件)。目前有 8 个龙卷风实例正在运行以计算和提供这些数据。
这从一开始就是一个错误的设计决策,我面临着访问服务器的应用程序的许多超时。
我想在遗留代码库中更改尽可能少的代码行,因为我不想破坏任何已经在现场测试过的东西。我该怎么做才能将此系统转换为可以并行执行更多 xml 计算的线程系统?
将此系统转换为可以并行执行更多 xml 计算的线程系统
如果有足够多的 Tornado 实例使计算资源饱和,那么迁移到线程模型可能不会获得太多性能。然而,摆脱阻塞代码有助于连接超时。
另一种选择是摆脱所有异步代码并使用tornado.wsgi.WSGIApplication
. 这样,您可以在线程化的 WSGI 服务器上运行应用程序。此处列出了 WSGI 模式中不可用的功能。
使用 Tornado 只接收非阻塞请求。要进行实际的 XML 处理,您可以生成另一个进程或使用像 celery 这样的异步任务处理器。使用 celery 将有助于您将来轻松扩展系统。事实上,使用这个模型,您只需要一个 Tornado 实例。
@Eren - 我不认为计算资源已经饱和。只是因为 Tornado 现在正在以阻塞模式服务请求,因此不会同时处理超过 8 个请求。