Python自2.5版本開始,引入了協(xié)程的概念,當(dāng)時(shí)基于生成器并加入了yield關(guān)鍵字,這是Python構(gòu)建高性能異步IO編程的基礎(chǔ)。
import asyncio async def hello(): print("Hello") await asyncio.sleep(1) print("World") loop = asyncio.get_event_loop() loop.run_until_complete(hello()) loop.close()
上述示例程序就是Python使用asyncio庫實(shí)現(xiàn)的協(xié)程例子,其中hello()函數(shù)就是一個(gè)協(xié)程對(duì)象。
協(xié)程的優(yōu)勢(shì)在于可以充分利用單線程的優(yōu)勢(shì),避免了多線程的繁雜;同時(shí)由于協(xié)程是完全在內(nèi)存中的運(yùn)行,因此執(zhí)行效率極高。
在Python的協(xié)程編程中,除了使用asyncio庫外,還可以通過第三方的greenlet庫或者使用async/await關(guān)鍵字來實(shí)現(xiàn)。
import greenlet def test1(): print("start coroutine...") gr2.switch() print("test1 finished!") def test2(): print("start coroutine...") gr1.switch() print("test2 finished!") gr1 = greenlet.greenlet(test1) gr2 = greenlet.greenlet(test2) gr1.switch()
上述示例程序就是使用greenlet庫實(shí)現(xiàn)的協(xié)程例子。
總結(jié)來說,Python在語言層面支持協(xié)程,而且通過asyncio庫、greenlet庫和async/await關(guān)鍵字等,提供了多種實(shí)現(xiàn)協(xié)程的方式,極大地方便了Python開發(fā)者進(jìn)行高性能異步編程。