码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • python一点通:coroutine (协程)是什么和重要知识点?


    协程已经成为Python用于编写并发和异步代码的重要工具之一。在这篇博客文章中,我们将深入探讨协程是什么,它们的优点,以及它们与传统的线程和进程有何不同。

    什么是协程?

    协程是用于合作式多任务处理的子程序(或函数)的泛化。它们允许函数有多个入口和出口点,使它们能够“暂停”和“恢复”执行。

    1. 如何定义和使用协程
      定义:协程看起来像常规函数,但是使用async def语法定义。
    async def my_coroutine():
    
    • 1
    1. 暂停与恢复:await关键字允许协程被暂停,为其他协程的运行提供机会。一旦等待的任务完成,协程会从暂停的地方恢复。
    async def another_coroutine():
        print("开始")
        await asyncio.sleep(1)
        print("1秒后结束")
    
    • 1
    • 2
    • 3
    • 4
    1. 执行:协程不能直接调用。它们需要使用事件循环进行“调度”,例如asyncio中的循环。
    import asyncio
    
    asyncio.run(another_coroutine())
    
    • 1
    • 2
    • 3
    1. 任务:要并发运行多个协程,可以将它们封装在Task对象中。
    task1 = asyncio.create_task(coroutine1())
    task2 = asyncio.create_task(coroutine2())
    
    • 1
    • 2

    协程的优点

    协程在I/O-bound任务上表现出色。它们允许高效的并发,而无需使用线程或进程。当等待某个操作(如网络请求)而不阻塞其他操作时,这特别有用。

    生成器和协程的注意事项

    在现代的async/await语法(Python 3.5中引入)之前,协程是使用生成器函数和yield关键字构建的。尽管现在async/await更为普遍,但基于生成器的协程在特定上下文中仍然具有相关性。

    协程 vs. 线程和进程

    区分协程、线程和进程非常关键:

    线程和进程由操作系统管理,并且可以在多核CPU上同时运行。
    协程提供合作式多任务处理,一次只运行一个协程,但可以放弃控制权,让其他协程运行。协程之间的轻量级上下文切换使它们对I/O-bound任务非常高效。

    英文

    阅读

    AI好书推荐

    AI日新月异,但是万丈高楼拔地起,离不开良好的基础。您是否有兴趣了解人工智能的原理和实践? 不要再观望! 我们关于 AI 原则和实践的书是任何想要深入了解 AI 世界的人的完美资源。 由该领域的领先专家撰写,这本综合指南涵盖了从机器学习的基础知识到构建智能系统的高级技术的所有内容。 无论您是初学者还是经验丰富的 AI 从业者,本书都能满足您的需求。 那为什么还要等呢?

    人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典

    北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

  • 相关阅读:
    数据结构——栈
    理解SpringBoot的自动装配
    JAVA面试八股文之JVM
    【SSM框架】Mybatis详解07(源码自取)之动态代理的实现
    GIS 数据结构BSP树
    ModuleNotFoundError: No module named ‘office’ - Python自动化办公,常见问题【01】
    服务器冗余常见问题及解答汇总
    meshlab: pymeshlab保存物体的横截面(compute planar section)
    HNU-电路与电子学-综合设计-模型机
    golang cobra命令行工具介绍
  • 原文地址:https://blog.csdn.net/robot_learner/article/details/133938247
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号