@ gen.engine和@ gen.coroutine Tornado 4.4.2之间的性能差异

时间:2017-03-14 20:06:09

标签: asynchronous tornado coroutine

我有一个用@ gen.coroutine修饰的处理程序方法:

class MyHandler(tornado.web.RequestHandler):

    @gen.coroutine
    def post(self):

        ...

```

当我对此API执行性能测试时,我的服务最多可以执行每秒3或4个请求。

如果我只是将@gen.coroutine更改为@gen.engine并执行完全相同的性能测试,则该服务每秒可处理大约50个请求。

两个装饰者之间的性能差异是什么原因?我的@ gen.engine用法是错误的吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

两个装饰器之间不应该有任何性能差异。你确定你的应用程序在两种情况下都做同样的事情吗?在@gen.coroutine的实现上简单地将@gen.engine替换为RequestHandler.post并不等同于此。您还必须添加@tornado.web.asynchronous,这是@engine所需但@coroutine未使用的array_walk() expects parameter 1 to be array, null given