Python中的协程是什么?如何使用协程?代码举例讲解

Python中的协程是一种轻量级的线程,又称微线程。它能够暂停和恢复执行,并与其他协程共享资源。

协程的优点是:

1、 高并发性:一个CPU可以运行很多协程,并且切换代价低。
2、 无需线程上下文切换的开销:协程的切换更加轻量。
3、 共享数据简单:协程之间可以简单地共享数据,无需像线程那样用锁来同步。

在Python中,我们可以使用yield关键字实现协程,或者使用asyncio模块开发协程。

1、 yield实现协程:

def coroutine1():
    print('coroutine1 printed')
    yield
    print('coroutine1 resumed')

def coroutine2():
    print('coroutine2 printed')
    yield
    print('coroutine2 resumed')

# 协程只是定义,还未执行    
c1 = coroutine1()  
c2 = coroutine2()

# 协程第一次执行到yield暂停    
next(c1)  
next(c2)

# 再次调用时从暂停处继续执行
next(c1)  
next(c2)
输出:
coroutine1 printed
coroutine2 printed
coroutine1 resumed
coroutine2 resumed

2、 asyncio实现协程:

import asyncio

async def coroutine1(): 
    print('coroutine1 printed')
    await asyncio、sleep(1)
    print('coroutine1 resumed')

async def coroutine2():
    print('coroutine2 printed')
    await asyncio、sleep(2)
    print('coroutine2 resumed')

asyncio、run(asyncio、gather(coroutine1(), coroutine2()))

输出:

coroutine1 printed
coroutine2 printed 
coroutine1 resumed 
coroutine2 resumed