提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:本文主要提到python中异步并发操作,关于Thread多线程同步并发见上文。
Python 中的协程函数也就是我们所说的异步编程,它允许你编写非阻塞的代码,特别适用于 I/O 密集型任务(如网络请求、文件读写等)。首先需要清楚的明白如下概念:
- 同步编程
像我们正常定义的函数就是同步函数,它只能每个函数依次进行,假如某个函数遇到了阻塞,那么整个程序将会被堵塞住,影响执行效率。当然我们可以通过多线程的方式处理,多线程处理的函数也是同步函数,他们将会在同一时刻同步并发。 - 异步编程
异步编程也就是我们今天说的协程,它是在一个单一线程里执行的。它的概念是同一个时间段完成多个任务(就像我们人类一样,需要执行吃饭任务,在点完外卖后,不会一直等待外卖,而是这个时间去打一把游戏,等外卖到了,再继续执行吃饭任务,显然这更加的合理。)这就是所谓的异步并发。
提示:以下是本篇文章正文内容,仅供学习参考
一、asyncio是什么?
asyncio 是 Python 标准库中的一个模块,用于编写异步 I/O 操作的代码。它基于事件循环(Event Loop)和协程(Coroutine),能够高效地处理 I/O 密集型任务(如网络请求、文件读写等),同时避免阻塞主线程。
二、使用步骤
1.引入库
代码如下(示例):
import asyncio
2. 定义协程函数 async
代码如下(示例):
import asyncio
import time
async def task_1():
print("send a task1 request...")
await asyncio.sleep(5)
print("get responds")
return "task1"
async def task_2():
print("send a task2 request...")
await asyncio.sleep(3)
print("get responds")
return "task2"
if __name__ == '__main__':
t1 = task_1()
t2 = task_2()
print(f"t1: {
t1}, t2: {
t2}")
async
关键字定义的函数为协程函数,返回一个协程对象,执行结果打印如下,得到的t1
和t2
是协程对象,结果如下
3. 执行协程函数 await
await
关键字是用来执行协程函数对象的,await
会暂停执行当前协程直到等待的协程执行完毕,并且让出控制权给事件循环,见示例代码:
import asyncio
import time
async def task_1():
print("send a task1 request...")
await asyncio.sleep(2)
print("get task1 responds")
return "task1"
async def task_2():
print("send a task2 request...")
await asyncio.sleep(3)
print("get task2 responds")
return "task2"
def task3():
print("running task 3")
time.sleep(3)
print("end task3")
async def _main():
ret = await task_1()
ret = await task_2()
task3()
if __name__ == '__main__':
start_ = time.perf_counter()
asyncio.run(_main())
end_ = time.perf_counter()
print(f"total : {
end_ - start_}")
执行结果如下:
<