【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)

结果如下:



目录
相关文章
|
15天前
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
|
5天前
|
NoSQL 关系型数据库 MySQL
python协程+异步总结!
本文介绍了Python中的协程、asyncio模块以及异步编程的相关知识。首先解释了协程的概念和实现方法,包括greenlet、yield关键字、asyncio装饰器和async/await关键字。接着详细讲解了协程的意义和应用场景,如提高IO密集型任务的性能。文章还介绍了事件循环、Task对象、Future对象等核心概念,并提供了多个实战案例,包括异步Redis、MySQL操作、FastAPI框架和异步爬虫。最后提到了uvloop作为asyncio的高性能替代方案。通过这些内容,读者可以全面了解和掌握Python中的异步编程技术。
18 0
|
5天前
|
数据采集 缓存 程序员
python协程使用教程
1. **协程**:介绍了协程的概念、与子程序的区别、优缺点,以及如何在 Python 中使用协程。 2. **同步与异步**:解释了同步与异步的概念,通过示例代码展示了同步和异步处理的区别和应用场景。 3. **asyncio 模块**:详细介绍了 asyncio 模块的概述、基本使用、多任务处理、Task 概念及用法、协程嵌套与返回值等。 4. **aiohttp 与 aiofiles**:讲解了 aiohttp 模块的安装与使用,包括客户端和服务器端的简单实例、URL 参数传递、响应内容读取、自定义请求等。同时介绍了 aiofiles 模块的安装与使用,包括文件读写和异步迭代
8 0
|
1月前
|
数据处理 Python
深入探索:Python中的并发编程新纪元——协程与异步函数解析
深入探索:Python中的并发编程新纪元——协程与异步函数解析
25 3
|
2月前
|
Python
Python中的异步编程与协程实践
【9月更文挑战第28天】本文旨在通过一个简单易懂的示例,介绍如何在Python中利用asyncio库实现异步编程和协程。我们将通过代码示例来展示如何编写高效的并发程序,并解释背后的原理。
|
2月前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
25 1
|
2月前
|
调度 Python
揭秘Python并发编程核心:深入理解协程与异步函数的工作原理
在Python异步编程领域,协程与异步函数成为处理并发任务的关键工具。协程(微线程)比操作系统线程更轻量级,通过`async def`定义并在遇到`await`表达式时暂停执行。异步函数利用`await`实现任务间的切换。事件循环作为异步编程的核心,负责调度任务;`asyncio`库提供了事件循环的管理。Future对象则优雅地处理异步结果。掌握这些概念,可使代码更高效、简洁且易于维护。
23 1
|
2月前
|
调度 开发者 Python
探索Python中的异步编程:理解asyncio和协程
【9月更文挑战第22天】在现代软件工程中,异步编程是提升应用性能的关键技术之一。本文将深入探讨Python语言中的异步编程模型,特别是asyncio库的使用和协程的概念。我们将了解如何通过事件循环和任务来处理并发操作,以及如何用协程来编写非阻塞的代码。文章不仅会介绍理论知识,还会通过实际的代码示例展示如何在Python中实现高效的异步操作。
|
29天前
|
数据采集 调度 Python
Python编程异步爬虫——协程的基本原理(一)
Python编程异步爬虫——协程的基本原理(一)
|
29天前
|
数据采集 Python
Python编程异步爬虫——协程的基本原理(二)
Python编程异步爬虫——协程的基本原理(二)