Python核心技术与实战——十八|Python并发编程之Asyncio
我们在上一章学习了Python并发编程的一种实现方法——多线程。今天,我们趁热打铁,看看Python并发编程的另一种实现方式——Asyncio。和前面协程的那章不太一样,这节课我们更加注重原理的理解。 通过上节课的学习,我们知道在进行I/O操作的时候,使用多线程与普通的单线程比较,效率有了很大的提高,既然这样,为什么还要Asyncio呢? 虽然多线程有诸多优点并且应用广泛,但是也存在一定的局限性: ※多线程运行过程很容易被打断,因此有可能出现race condition的情况 ※线程的切换存在一定的消耗,线程数量不能无限增加,因此,如果I/O操作非常密集,多线程很有可能满足不了高效率、高质量的需求。 针对这些问题,Asyncio应运而生。 什么是Asyncio? Sync VS Async 我们首先来区分一下Sync(同步)和Async(异步)的概念。 ※所谓Sync,是指操作一个接一个的执行,下一个操作必须等上一个操作完成后才能执行。 ※而Async是指不同操作之间可以相互交替执行,如果某个操作被block,程序并不会等待,而是会找出可执行的操作继续执行。 举个简单的例子,我们要做一个报表并用邮件发送给老板,看看两种方式有什么不同: ※按照Sync的方式,我们相软件里输入各项数据,然后等5分钟生成了报表明细以后,再写邮件发送给老板 ※而按照Async的方式,在输完数据以后