我试图了解Tornado如何在异步和非阻塞模式下工作。
我只是希望我的RequestHandler将sum(range(10000000))
的结果写回客户端。
我在RequestHandler中尝试过这种方式:
@tornado.gen.coroutine
def post(self, *args, **kwargs):
res = yield tornado.gen.Task(self._sum, 10000000)
self.write("Result: %d" % res)
self.finish()
def _sum(self, size, callback):
callback(sum(range(size)))
我使用apache2基准测试工具测试我的Tornado,其中包含100个请求和50个并发请求。
问题是我获得了以下代码的相同时间(整个测试约15秒):
def post(self, *args, **kwargs):
res = sum(range(10000000))
self.write("Result: %d" % res)
我不明白我在哪里做错了。
提前谢谢
答案 0 :(得分:1)
Tornado未针对并发计算进行优化 - 实际上,标准Python解释器本身无法在单个进程中进行并发计算。 Tornado经过优化,可同时执行异步网络操作。您的测试是计算密集型的,因此您可以正确地发现在计算周围执行“产量”没有任何好处。