【Python】协程coroutinue

简介: 【Python】协程coroutinue
import time
def func():
    print("我爱天空")
    time.sleep(3) # 这里线程处于堵塞状态,CPU不为我进行工作
    print("我真的很爱天空")
if __name__ == "__main__":
    func()
# input ==> 用户输入时线程处于堵塞状态
# requests请求 ==> 发送网络请求时线程处于堵塞状态

上述demo中time.sleep(3) ==> 这里线程处于堵塞状态,CPU不为我进行工作

线程什么时候处于堵塞状态?

input ==> 用户输入时线程处于堵塞状态

requests请求 ==> 发送网络请求时线程处于堵塞状态

协程的作用就是线程出现堵塞时可以转换到其他任务提高CPU的处理效率

image.png

对于协程的理解:

1.微观上:一个任务一个任务的切换

2.宏观上:多任务并行处理

3. 协程实现

# 导入异步处理的python库
import asyncio
# 异步程序
async def func():
    print("hello,xiaoshan")
if __name__ == "__main__":
    f = func()
    # 执行异步程序
    asyncio.run(f)
多线程执行时协程的作用——切换任务

demo如下::

# 导入异步处理的python库
import asyncio
import time
# 异步程序
async def func1():
    print("我爱天空num1")
    await asyncio.sleep(3) # 这里线程处于堵塞状态,CPU不为我进行工作
    print("我真的很爱天空num1")
async def func2():
    print("我爱天空num2")
    await asyncio.sleep(2) # 这里线程处于堵塞状态,CPU不为我进行工作
    print("我真的很爱天空num2")
async def func3():
    print("我爱天空num3")
    await asyncio.sleep(4) # 这里线程处于堵塞状态,CPU不为我进行工作
    print("我真的很爱天空num3")
if __name__ == "__main__":
    f1 = func1()
    f2 = func2()
    f3 = func3()
    task = [f1, f2, f3]
    t1 = time.time()
    # 执行异步程序
    asyncio.run(asyncio.wait(task))
    t2 = time.time()
    print(t2-t1)

结果如下:



目录
相关文章
|
3月前
|
Go 调度 Python
Golang协程和Python协程用法上的那些“不一样”
本文对比了 Python 和 Go 语言中协程的区别,重点分析了调度机制和执行方式的不同。Go 的协程(goroutine)由运行时自动调度,启动后立即执行;而 Python 协程需通过 await 显式调度,依赖事件循环。文中通过代码示例展示了两种协程的实际运行效果。
191 7
|
2月前
|
数据采集 网络协议 API
协程+连接池:高并发Python爬虫的底层优化逻辑
协程+连接池:高并发Python爬虫的底层优化逻辑
|
3月前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
200 0
|
4月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
221 3
|
数据处理 Python
深入探索:Python中的并发编程新纪元——协程与异步函数解析
深入探索:Python中的并发编程新纪元——协程与异步函数解析
146 3
|
Python
Python中的异步编程与协程实践
【9月更文挑战第28天】本文旨在通过一个简单易懂的示例,介绍如何在Python中利用asyncio库实现异步编程和协程。我们将通过代码示例来展示如何编写高效的并发程序,并解释背后的原理。
102 7
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
147 1
|
调度 Python
揭秘Python并发编程核心:深入理解协程与异步函数的工作原理
在Python异步编程领域,协程与异步函数成为处理并发任务的关键工具。协程(微线程)比操作系统线程更轻量级,通过`async def`定义并在遇到`await`表达式时暂停执行。异步函数利用`await`实现任务间的切换。事件循环作为异步编程的核心,负责调度任务;`asyncio`库提供了事件循环的管理。Future对象则优雅地处理异步结果。掌握这些概念,可使代码更高效、简洁且易于维护。
223 1
|
调度 开发者 Python
探索Python中的异步编程:理解asyncio和协程
【9月更文挑战第22天】在现代软件工程中,异步编程是提升应用性能的关键技术之一。本文将深入探讨Python语言中的异步编程模型,特别是asyncio库的使用和协程的概念。我们将了解如何通过事件循环和任务来处理并发操作,以及如何用协程来编写非阻塞的代码。文章不仅会介绍理论知识,还会通过实际的代码示例展示如何在Python中实现高效的异步操作。

推荐镜像

更多