我有一个用@ gen.coroutine修饰的处理程序方法:
class MyHandler(tornado.web.RequestHandler):
@gen.coroutine
def post(self):
...
```
当我对此API执行性能测试时,我的服务最多可以执行每秒3或4个请求。
如果我只是将@gen.coroutine
更改为@gen.engine
并执行完全相同的性能测试,则该服务每秒可处理大约50个请求。
两个装饰者之间的性能差异是什么原因?我的@ gen.engine用法是错误的吗?
谢谢!
答案 0 :(得分:0)
两个装饰器之间不应该有任何性能差异。你确定你的应用程序在两种情况下都做同样的事情吗?在@gen.coroutine
的实现上简单地将@gen.engine
替换为RequestHandler.post
并不等同于此。您还必须添加@tornado.web.asynchronous
,这是@engine
所需但@coroutine
未使用的array_walk() expects parameter 1 to be array, null given
。