什么是协程?
  • 协程,又称微线程,英文名Coroutine,协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在合适gr的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。
  • 通俗的描述:
    • 协成是线程中的一个特殊的函数,这个函数执行的时候,可以在某个地方暂停,并且可以重新在暂停处,继续运行,协程在进行切换的时候,只需要保存当前协程函数中的一些临时变量等信息,然后切换到另外一个函数中执行,并且切换的次数以及什么时候再切换到原来的函数,都可以由开发者自己决定。
    • 协成切换的时候,既不涉及到资源切换,也不涉及到操作系统的调度,而是在在同一个程序中切换不同的函数执行,所以协成占用的资源非常少,切换得时候几乎不耗费什么资源,一秒钟切换个上百万次系统都抗的住
    • 所以说,协程与进程、线程相比并不是一个维度的概念
"""
async await : python3.5之前时没有的
什么是协程:(协程存在于线程之中,是比线程更小的执行单元(有称之为微线程))
本质上就是一个特殊的函数,执行到特定的地方可以挂起,切换到其他协程函数中去执行,
async:声明异步函数(协程)
await:只能在通过async定义的函数中使用
协程函数执行到await时可以切换到其他协程中去执行
"""
import asyncio

async def work():
print("---111111----------")
await asyncio.sleep(1)
print("---2222222----------")

if __name__ == '__main__':
res = work() # <coroutine object work at 0x03800DB0>
# 调用协程函数
asyncio.run(res)
import asyncio

# 创建协程函数1
async def work1(name):
for i in range(6):
await asyncio.sleep(1)
print(f"{name}执行浇花的第---{i}---秒")

# 创建协程函数2
async def work2(name):
for i in range(5):
await asyncio.sleep(1)
print(f"{name}执行打墙的第---{i}---秒")

# async def main():
# # 创建任务
# t1 = asyncio.create_task(work1('张三'))
# t2 = asyncio.create_task(work2('李四'))
# await t1
# await t2

async def main():
# 创建任务
# ts = [work1('张三—{}'.format(i)) for i in range(500)]
# await asyncio.gather(*ts)

# 一次提交多个协程任务
await asyncio.gather(
work1('张三0'),
work2('张三1'),
work1('张三2'),
work1('张三3'),
work1('张三4')
)

asyncio.run(main())