在龙卷风中,我们平时写下面的代码来异步调用一个函数:Tornado的“收益率”与asyncio的“收益率”之间的区别?
class MainHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def post(self):
...
yield self.handleRequest(foo)
...
@tornado.gen.coroutine
def handleRequest(self, foo):
...
但ASYNCIO(将与Python 3.4发货,可以从PIP安装的Python 3.3),我们使用yield from
实现同样的事情:
@asyncio.coroutine
def myPostHandler():
...
yield from handleRequest(foo)
...
@asyncio.coroutine
def handleRequest(foo)
...
从代码中看到,所不同的是yield
和yield from
。但前者handleRequest(foo)
返回一个tornado.concurrent.Future
对象,后者返回generator
对象。
我的问题是,机制中的两件事有什么区别?控制流程如何?谁调用实际的handleRequest
并检索其返回值?
追加:我有Python生成器和迭代器的基本知识。我想了解通过使用这些Tornado和asyncio所取得的成果,以及这两种机制之间的区别。
感谢您的快速回复。但我的问题与'产量'本身无关。我很担心Tornado和asyncio通过使用'yield'和'yield'来实现什么。 –
@StarBrilliant:他们将任务推迟到稍后;发电机可以暂停,以便事件循环可以将控制传递给另一个发电机。 –
@StarBrilliant:协程转轮将循环通过主动协程并给予每个执行机会。需要等待网络资源的协程可以立即立即产生,以允许控制传递给可能不需要等待的其他协程。 –