侧边栏壁纸
博主头像
行迹小栈

即使明天我们的手脚都会折断,但是我们的衣领和袖口,依然笔挺!

  • 累计撰写 113 篇文章
  • 累计创建 13 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

async 和 await

Administrator
2024-09-20 / 0 评论 / 0 点赞 / 20 阅读 / 0 字 / 正在检测是否收录...

并发、并行、同步和异步(名词解释)

并发

并发指的是 一个 CPU 同时处理多个程序,但是在同一时间点只会处理其中一个。并发的核心是:程序切换。它意味着操作系统会在非常短的时间内快速地在多个程序之间切换,使得每个程序都有机会得到执行

并行

并行指的是多个 CPU 同时处理多个程序,同一时间点可以处理多个。

同步

同步:执行 IO 操作时,必须等待执行完成才得到返回结果。

异步

异步编程是一种编程范式,它允许程序在等待某个操作完成时继续执行其他任务。这可以提高程序的效率,尤其是在I/O密集型操作(如网络请求、文件读写)中。在Python中,异步编程通常通过 asyncio库来实现。

进程,线程,协程的区别

多进程通常利用的是多核 CPU 的优势,同时执行多个计算任务。每个进程有自己独立的内存管理,所以不同进程之间要进行数据通信比较麻烦。

多线程是在一个 cpu 上创建多个子任务,当某一个子任务休息的时候其他任务接着执行。多线程的控制是由 python 自己控制的。 子线程之间的内存是共享的,并不需要额外的数据通信机制。但是线程存在数据同步问题,所以要有锁机制。

协程是一种编程结构,允许一个函数在执行过程中暂停并保存当前状态,以便稍后可以从中恢复执行。在Python中,协程通常使用 async/await语法来实现。当一个协程使用 await关键字调用另一个协程时,它会暂停当前协程的执行,直到被调用的协程完成。

async、await和asyncio的介绍和使用

官方文档

在Python中,async和await是一对配合使用的关键字,配合使用可以实现 协程 的特性,在配合asyncio编写异步代码可实现并发效果

async关键字:

async用于定义一个异步函数,表明该函数是一个协程,可以在其中使用await关键字等待其他异步操作完成
异步函数的执行不会阻塞事件循环,而是会立即返回一个协程对象。

await关键字:

await用于在异步函数内部等待其他协程执行完成,后面通常跟着一个需要等待的协程对象
当遇到await关键字时,事件循环会挂起当前的协程,并执行其他协程任务,直到等待的协程完成后才会恢复执行当前协程

asyncio

asyncio 是 python 的一个内置库,主要用于编写异步代码,其中协程是实现异步编程的关键。

示例

在异步函数中,只有两个或者多个协程任务都被await调用时,才能并行这些协程任务(无论协程任务在此异步函数中的什么位置),而 print 或者其他没有被await调用的函数,都是阻塞操作,都需要协程任务完成之后,它们才能执行

import asyncio
import time

async def async_function():
    print("开始异步操作-1")
    await asyncio.sleep(5)  # 模拟异步I/O操作
    print("异步操作完成-1")
    return "异步操作结果-1"

async def another_async_function():
    print("开始异步操作-2")
    await asyncio.sleep(5)  # 模拟另一个异步I/O操作
    print("异步操作完成-2")
    return "异步操作结果-2"


def sync_func():
    print('这个函数是同步操作(阻塞操作,会让程序按顺序执行,造成堵塞)\n')


async def main():
    # 创建两个异步任务的协程
    task1 = asyncio.create_task(async_function())
    task2 = asyncio.create_task(another_async_function())

    # 等待异步任务完成
    result1 = await task1

    print('\n这个 print 是同步操作(阻塞操作,会让程序按顺序执行,造成堵塞)')
    sync_func()

    # 等待异步任务完成
    result2 = await task2


    print(result1, result2)




# 运行事件循环
asyncio.run(main())
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区