目录
一、协程的定义:
1、协程(co-routine):
2、协程的优势:
3、协程的劣势:
二、实例代码演示:
1、最简单的协程:
2、两个运行任务的函数:run、create_task
一、协程的定义: 1、协程(co-routine):
又称微线程,是一种多方协同的工作方式。当前执行者在某个时刻主动让出(yield)控制流,并记住自身当前的状态,以便在控制流返回时能从上次让出的位置恢复(resume)执行。简而言之,协程的核心思想就在于执行者对控制流的 “主动让出” 和 “恢复”。相对于,线程此类的 “抢占式调度” 而言,协程是一种 “协作式调度” 方式。
2、协程的优势:- 执行效率极高,因为子程序切换(函数)不是线程切换,由程序自身控制,没有切换线程的开销。所以与多线程相比,线程的数量越多,协程性能的优势越明显。
- 不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在控制共享资源时也不需要加锁,因此执行效率高很多。
协程可以处理IO密集型程序的效率问题,但是处理CPU密集型不是它的长处,如要充分发挥CPU利用率可以结合多进程+协程。
二、实例代码演示: 1、最简单的协程:import asyncio
async def main():
print('hello')
await asyncio.sleep(2)
print('world')
asyncio.run(main()) # 运行协程,这样写。
2、两个运行任务的函数:run、create_task
import asyncio
import time
async def say_after(delay1, delay2, what):
await asyncio.sleep(delay1)
print(what)
await asyncio.sleep(delay2)
async def myfun():
print(f'开始时间:{time.strftime("%X")}')
await say_after(1,1, 'hello')
await say_after(2,2, 'world')
print(f'执行结束:{time.strftime("%X")}')
asyncio.run(myfun())
# create_task 并发运行异步任务多协程的函数
async def myfun1():
task1 = asyncio.create_task(say_after(1,1,'hello'))
task2 = asyncio.create_task(say_after(2,2, "world"))
print(f"开始时间:{time.strftime('%X')}")
await task1
await task2
print(f'执行结束:{time.strftime("%X")}')
asyncio.run(myfun1())
协程,又称微线程,使用async修饰要运行的函数,在运行协程函数时,需要使用await。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)