有哪些选项可以将事件驱动的龙卷风应用程序转换为线程或阻塞系统?



我继承了一个相当大的代码库,它利用tornado来计算和提供大而复杂的数据类型(想象一个1 MB的XML文件)。目前有8个龙卷风实例运行来计算和服务这些数据。

这从一开始就是一个错误的设计决策,我面临着访问服务器的应用程序的许多超时。

我想在遗留代码库中更改尽可能少的代码行,因为我不想破坏任何已经在该领域测试过的东西。我怎样才能把这个系统转换成一个线程系统,以便并行执行更多的xml计算?

将此系统转换为可以并行执行更多xml计算的线程系统

如果有足够多的Tornado实例使计算资源饱和,那么迁移到线程模型可能不会获得太多性能。然而,摆脱阻塞代码有助于解决连接超时问题。

另一个选择是摆脱所有异步代码并使用tornado.wsgi.WSGIApplication。这样,您就可以在线程化的WSGI服务器上运行应用程序。

使用Tornado只接收非阻塞请求。要执行实际的XML处理,可以生成另一个进程或使用像celery这样的异步任务处理器。使用芹菜可以方便将来扩展系统。事实上,使用这个模型,您只需要一个Tornado实例。

@ even -我不认为计算资源正在趋于饱和。这可能只是超过8个请求没有同时得到处理,因为Tornado现在将以阻塞模式服务请求。

最新更新