什么是协程
协程(co-routine,又称微线程、纤程)是一种多方协同的工作方式。协程不是进程或线程,其执行过程类似于 Python 函数调用,Python 的 asyncio 模块实现的异步IO编程框架中,协程是对使用 async 关键字定义的异步函数的调用。当前执行者在某个时刻主动让出(yield)控制流,并记住自身当前的状态,以便在控制流返回时能从上次让出的位置恢复(resume)执行
协程与线程的区别
1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。
2) 线程进程都是同步机制,而协程则是异步。
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。
6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。
# coding:utf-8
import asyncio
import time
async def say_after(delay, what):
await asyncio.sleep(delay) #阻塞 delay 指定的秒数
print(what)
async def main():
#asyncio.create_task() 函数用来并发运行作为 asyncio 任务 的多个协程
# task1 = asyncio.create_task(say_after(5, 'hello'))
# task2 = asyncio.create_task(say_after(5, 'world'))
print(f"started at {time.strftime('%X')}")
# await task1
# await task2
await say_after(5, 'hello')
await say_after(5, 'world')
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
started at 10:02:52
hello
world
finished at 10:03:02
posted on
浙公网安备 33010602011771号