在龍捲風中,我們平時寫下面的代碼來異步調用一個函數: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:協程轉輪將循環通過主動協程並給予每個執行機會。需要等待網絡資源的協程可以立即立即產生,以允許控制傳遞給可能不需要等待的其他協程。 –