Python(三十八)python协程(1)

简介: 协程不是由计算机提供,而是程序员人为创造的。协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术吗,简而言之,其实就是通过一个线程实现代码块相互切换执行。ruby复制代码#!/usr/bin/python3# -*- coding: utf-8 -*-# @Time : 2022/3/17 19:38# @Author : camellia# @Email : 805795955@qq.com# @File : coroutine.py# @Software: PyCharm# 测试协程程序def fun1(): pr

协程不是由计算机提供,而是程序员人为创造的。

协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术吗,简而言之,其实就是通过一个线程实现代码块相互切换执行。

ruby

复制代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2022/3/17 19:38
# @Author  : camellia
# @Email   : 805795955@qq.com
# @File    : coroutine.py
# @Software: PyCharm
# 测试协程程序
def fun1():
    print('我在方法fun1中!')
def fun2():
    print('我在方法fun2中……')
fun1()
fun2()

实现协程大概有以下这么几种方法:

1.      Greenlet,早期模块

2.      Yield关键字

3.      Asyncio装饰器(python3.4以上才有)

4.      Async await关键字(python3.5以上才有)

一:greenlet(比较老旧,不建议使用)

1:安装greenlet

复制代码

pip3 install greenlet

 2:基本使用

php

复制代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2022/3/17 19:38
# @Author  : stone
# @Email   : 805795955@qq.com
# @File    : coroutine.py
# @Software: PyCharm
# 测试协程程序
from greenlet import greenlet
def test1():
    print(12)           # 第二步 输出12
    gr2.switch()        # 第三步 切换test2函数
    print(34)           # 第六步 输出34
    gr2.switch()        # 第七步 切换test2函数
def test2():
    print(56)           # 第四步 输出56
    gr1.switch()        # 第五步 切换test1函数
    print(78)           # 第八步 输出78
    gr1.switch()
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()            # 第一步 执行test1函数

执行上边的代码,输出:

复制代码

12
56
34
78

具体输出步骤请参照代码中的注释。

二:yield关键字(生成器)(比较老旧,不建议使用)

ruby

复制代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2022/3/17 19:38
# @Author  : camellia
# @Email   : 805795955@qq.com
# @File    : coroutine.py
# @Software: PyCharm
# 测试协程程序
def fun1():
    yield 1             # 第二步 输出 1
    yield from fun2()   # 第三步调用fun2
    yield 2             # 第六步 输出 2
def fun2():
    yield 3             # 第四步 输出 3
    yield 4             # 第五步 输出 4
f1 = fun1()             # 第一步调用fun1
for item in f1:
    print(item)

执行上边代码输出:

复制代码

1
3
4
2

具体输出步骤请参照代码中的注释。

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