在Tornado上运行异步后台任务

时间:2017-09-10 13:09:21

标签: python-2.7 asynchronous tornado

我正在使用Tornado Async框架来实现REST Web服务器。

我需要在同一台服务器的后台运行高CPU负载定期任务

这是低优先级定期任务。它应该在所有空闲内核上一直运行,但我不希望它影响Web服务器的性能(在HTTP请求负载很重的情况下,它应该采用较低的优先级)。

我可以使用 Tornado IOLoop API吗?

我知道我可以使用tornado.ioloop.PeriodicCallback来调用定期后台任务。但是,如果此任务计算量很大,我可能会导致Web服务出现性能问题。

1 个答案:

答案 0 :(得分:1)

Tornado (或python 3中的asyncio)或任何其他基于单进程事件循环的解决方案并不意味着用于CPU密集型任务。您应该仅将其用于IO密集型任务。

“背景”一词意味着你没有等待结果(我称之为有时是无人看管的任务)。此外,如果后台任务阻塞,则应用程序的其余部分必须等待,与请求处理程序阻塞的方式相同,其他部分(包括后台)将被阻止。

您可能正在考虑使用线程,但在python中,由于GIL,这也不是解决方案。

正确的解决方案是: