揭秘Python并发编程——协程

原文链接:https://baijiahao.baidu.com/s?id=1649450510185145678&wfr=spider&for=pc

Python并发编程一直是进阶当中不可跨越的一道坎,其中包括进程、线程、协程,今天我们就来聊一聊协程。

协程的定义很简单,从头到尾只有一条任务线在进行,就像是你可以在煮鸡蛋的时候背单词,但无论是煮鸡蛋还是背单词,始终都是你一个人在进行任务,线程的概念稍有不同,是把一个人分成两个人,一个在煮鸡蛋,一个在背单词,我们直接上代码看一下:

这是一段普通的代码,我们分别让不同的url睡眠不同的时间,总共是10s,看一下运行结果:

然后,我们使用协程来执行这段代码:

我们来看一下运行时间:

从结果来看,运行时间从10s缩短到了4s,基本上是最长的那个程序的运行时间。

那么具体的协程实现的具体原理是什么呢,我们来分解一下代码:

先看一下输出内容:

我们这里使用async来声明一个异步函数,使用await来执行异步函数,await的执行效果会使程序阻塞在这里,最后需要使用asyncio.run()来触发运行,asyncio.run()作为主程序的入口函数,在整个过程中只执行一次

当使用Task创建任务时,所有任务都会做好准备:

首先打印'before await'执行await task1,打印'worker_1 start',遇到sleep开始切换切换到执行await task2,后续没有需要执行的任务,所以暂时停留在Task2当task1的sleep完成,任务切回task1,打印'worker_1 done'之后切回task2等待sleep完成,打印'worker_2 done'以上就是协程的执行顺序了。

希望大家这个例子可以帮助大家更好的运用python。