Python 异步编程,从零基础到精通,收藏这瓶就够了!_python 异步教程

Python 异步编程,从零基础到精通,收藏这瓶就够了!_python 异步教程_第1张图片

异步编程:让你的应用跑得更快,就像加了Buff!

想要让你的应用程序性能起飞吗?异步编程就是你的秘密武器!它就像一个时间管理大师,让你在不需要手动管理线程或进程的情况下,同时处理多个任务。特别是对于需要进行 API 请求、文件读取或数据库交互的开发者来说,这简直是救星!它能保证你的程序在执行耗时操作时,不会卡死,依然流畅如丝。

在 Python 的异步世界里,asyncio 库就是当之无愧的王者。它通过 事件循环(Event Loop)、协程(Coroutines)和非阻塞 I/O(Non-blocking I/O) 这三大法宝,巧妙地安排程序的执行。如果你渴望构建 高响应、高扩展 的应用,那么深入研究 asyncio 绝对物超所值!


同步 VS 异步:一场速度与激情的较量!

同步编程 就像排队打饭,每个人都得老老实实地等前面的人打完才能轮到自己。这意味着每个任务都必须在前一个任务完成后才能开始。如下图所示,程序会像一个听话的小学生,等待一个任务执行完毕后再进行下一个任务。

(同步执行示意图)

异步编程 则像开了外挂,允许多个任务 同时开跑!当一个任务在等待“龟速”操作(比如从服务器慢吞吞地获取数据)时,程序可以灵活地去处理其他任务。这种 “非阻塞” 的骚操作,避免了程序像便秘一样卡住,让可用资源得到充分利用,执行效率自然DuangDuang往上涨!下图展示了异步编程的炫酷工作方式。

(异步执行示意图)


Asyncio:异步编程的瑞士军刀!

asyncio 就像一把瑞士军刀,为开发者提供了使用 asyncawait 语法编写异步代码的强大工具。它让你的程序在执行 网络请求、文件访问 等耗时操作时,也能保持活力,不会傻傻地等待。这样,程序在等待某些任务完成时仍然保持响应性,用户体验蹭蹭上涨!

更棒的是,asyncio 从 Python 3.3 版本起就是标配,无需额外安装,简直是贴心小棉袄!


Asyncio 的四大金刚!
  1. 事件循环(Event Loop):整个异步世界的大管家,负责管理和调度异步任务和协程。
  2. 协程(Coroutines):用 async def 定义的特殊函数,它们可以使用 await 关键字暂停执行,给其他任务让路。
  3. 任务(Tasks):已经被事件循环安排上的协程,可以用 asyncio.create_task() 轻松创建。
  4. Future 对象(Futures):代表着未来可能完成的操作结果,就像一个预言家,告诉你将来会发生什么。

Asyncio 实战:Show me the code!
import asyncio

async def calculate_square(number):
    print(f"开始计算 {number} 的平方,让我算算...")
    await asyncio.sleep(1)  # 模拟延迟,假装很忙
    print(f"{number} 的平方计算完成!")
    return number ** 2

async def calculate_cube(number):
    print(f"开始计算 {number} 的立方,这可是个大工程...")
    await asyncio.sleep(2)  # 模拟延迟,继续假装很忙
    print(f"{number} 的立方计算完成!")
    return number ** 3

async def main():
    # 创建任务,并扔给事件循环去处理
    task1 = asyncio.create_task(calculate_square(5))  
    task2 = asyncio.create_task(calculate_cube(3))   

    # 等待任务完成,拿到结果
    result1 = await task1
    result2 = await task2

    # 激动人心的时刻,输出结果!
    print(f"平方结果:{result1}")  
    print(f"立方结果:{result2}")   

if __name__ == "__main__":
    # 启动事件循环,让一切跑起来!
    asyncio.run(main())

代码解读:
  • 事件循环asyncio.run(main()) 就像一个总开关,启动事件循环,并运行 main() 协程。
  • 协程calculate_square(number)calculate_cube(number) 就是两个听话的协程,它们用 await asyncio.sleep() 模拟延迟,但不会阻塞整个程序,保证其他任务也能顺利执行。
  • 任务:在 main() 函数里,我们用 asyncio.create_task() 创建任务,让两个协程并行不悖地运行。
  • Future 对象result1result2 就是 Future 对象,它们代表 calculate_square()calculate_cube() 任务的最终结果,等待着被揭晓。
运行结果:
开始计算 5 的平方,让我算算...
开始计算 3 的立方,这可是个大工程...
5 的平方计算完成!
3 的立方计算完成!
平方结果:25
立方结果:27


Asyncio.gather():组团刷怪,效率翻倍!

asyncio.gather() 就像一个团队集结号,允许多个协程并行执行,特别适合 批量发送网络请求 这种场景。让我们用一个例子来模拟多个 HTTP 请求的并发执行,感受一下它的威力!

示例代码:
import asyncio

# 模拟从 URL 获取数据的任务,每个URL都有不同的延迟
async def fetch_data(URL, delay):
    print(f"开始从 {URL} 获取数据,耐心等待...")
    await asyncio.sleep(delay)  # 模拟网络延迟,考验网速的时候到了
    return f"成功从 {URL} 获取数据!(耗时 {delay} 秒)"

async def main():
    # 召唤 asyncio.gather(),让三个任务齐头并进!
    results = await asyncio.gather(
        fetch_data("https://openai.com", 2),  
        fetch_data("https://github.com", 5),  
        fetch_data("https://python.org", 7)   
    )

    # 激动地输出所有任务的结果!
    for result in results:
        print(result)

asyncio.run(main())

代码解读:
  • fetch_data(URL, delay) 模拟从 URL 获取数据,并设置不同的延迟时间,模拟真实的网络环境。
  • asyncio.gather() 让三个 fetch_data() 协程并行执行,告别排队等待,效率瞬间起飞!
  • 任务并行运行,程序不再需要等待一个任务完成后才开始下一个,效率提升看得见!
运行结果:
开始从 https://openai.com 获取数据,耐心等待...
开始从 https://github.com 获取数据,耐心等待...
开始从 https://python.org 获取数据,耐心等待...
成功从 https://openai.com 获取数据!(耗时 2 秒)
成功从 https://github.com 获取数据!(耗时 5 秒)
成功从 https://python.org 获取数据!(耗时 7 秒)


Asyncio.wait_for():超时警告,避免无限等待!

asyncio.wait_for() 就像一个闹钟,允许你为异步任务设置 超时时间。如果任务超时未完成,它会毫不留情地抛出一个 asyncio.TimeoutError 异常,防止程序陷入无限等待的深渊。

示例代码:
import asyncio

async def fetch_data():
    await asyncio.sleep(15)  # 模拟网络延迟,这次延迟有点长
    return "数据获取成功!"

async def main():
    try:
        # 设置超时时间为 10 秒,如果超过10秒还没完成,就放弃等待
        result = await asyncio.wait_for(fetch_data(), timeout=10) 
        print(result)
    except asyncio.TimeoutError:
        print("数据获取超时!网络太慢了,换个姿势再试试!")

asyncio.run(main())

如果 fetch_data() 任务执行超过 10 秒,就会触发超时异常 TimeoutError,程序会友好地提示你网络超时。


总结:Asyncio,异步编程的未来之星!

本指南深入浅出地介绍了 Python 的 asyncio 库,详细讲解了 同步与异步编程的区别、核心组件和实战代码示例。虽然编写异步代码一开始可能会让你觉得有点烧脑,但一旦你掌握了它的精髓,你将会发现它能极大地提升程序的性能和响应速度,让你的代码像火箭一样飞起来!

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包,需要点击下方链接即可前往获取

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
在这里插入图片描述

在这里插入图片描述

2.网安入门到进阶视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)
在这里插入图片描述

在这里插入图片描述

3.SRC&黑客文档

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

在这里插入图片描述

黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

在这里插入图片描述

5.黑客必读书单

在这里插入图片描述

6.网络安全岗面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
在这里插入图片描述
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

你可能感兴趣的:(python,数据库,开发语言,爬虫,web安全,安全,哈希算法)