协程概念
1.协程是单线程。
2.协程比线程轻量,在多任务并发场景下,多任务在单个线程中轮流切换使用CPU,比多线程效率高。
3.因为是单线程,所以不需要考虑线程安全问题。
4.因为是单线程,所以无法利用CPU多核优势,可以配合多进程利用CPU多核满足一些极限场景。
协程关键字
1.async关键字
用来修饰函数,使其成为一个coroutine(协程)对象
async def get_url(url): # 被async修饰过的函数就是个协程对象,不能用普通函数调用方式调用
print(threading.current_thread().ident, url) # 打印出线程ID
try:
resp = requests.get(url, timeout=1)
except(ReadTimeout,ConnectTimeout):
return 'ReadTimeout OR ConnectTimeout'
return resp
2.await关键字
- await用在修饰IO阻塞代码处,其只能修饰协程对象。
- 当阻塞代码运行完毕,await也起到获取其返回结果的作用
asy