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

Asynchronous @gen.engine和@gen.coroutine Tornado 4.4.2之间的性能差异,asynchronous,tornado,coroutine,Asynchronous,Tornado,Coroutine,我有一个用@gen.coroutine修饰的处理程序方法: class MyHandler(tornado.web.RequestHandler): @gen.coroutine def post(self): ... ``` 当我在此API上执行性能测试时,我的服务每秒最多可以执行3或4个请求 如果我简单地将@gen.coroutine更改为@gen.engine,并执行完全相同的性能测试,该服务每秒可以处理大约50个请求 这两个装饰器之间性能差异的原因是

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

class MyHandler(tornado.web.RequestHandler):

    @gen.coroutine
    def post(self):

        ...
```

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

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

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


谢谢

这两个装饰器之间不应该有任何性能差异。您确定您的应用程序在这两种情况下都执行相同的操作吗?这并不等同于在
RequestHandler.post
的实现上简单地将
@gen.coroutine
替换为
@gen.engine
。您还必须添加
@tornado.web.asynchronous
,这是
@engine
所必需的,但不能与
@coroutine
一起使用

这两个装饰器之间不应该有任何性能差异。您确定您的应用程序在这两种情况下都执行相同的操作吗?这并不等同于在
RequestHandler.post
的实现上简单地将
@gen.coroutine
替换为
@gen.engine
。您还必须添加
@tornado.web.asynchronous
,这是
@engine
所必需的,但不能与
@coroutine
一起使用