# Python 协程与 `yield` 的初步探索
在 Python 中,协程是一种用于处理异步编程的强大工具。它们可以让我们更加高效地管理 I/O 操作,而不需要使用复杂的线程或进程。本文将带你学习如何使用 `yield` 来实现基本的协程。
## 流程概述
在这篇文章中,我们将分步实现一个简单的协程。以下是每一步的流程:
| 步骤 | 描述 | 代码段示例
## Python 协程与 Yield
在 Python 中,协程是一种高效的并发编程模式。通过使用 `yield` 语句,我们可以在函数中暂停和恢复执行,这使得协程在处理 I/O 操作时非常有效。本文将向你介绍如何使用 `yield` 实现简单的 Python 协程。我们将通过流程图、代码示例和注释来详细说明。
### 整体流程
下面是实现 Python 协程的基本流程:
| 步骤 |
yield有两个意思,一个是生产,一个是退让,对于Python生成器的yield来说,这两个含义都成立。yield这个关键字,既可以在生成器中产生一个值,传输给调用方,同时也可以从调用方那获取一个值,在生成器内部使用。此外,yield还会作出让步,暂停生成器,让调用方继续工作,直到调用方需要下一个数据时,调用方则陷入等待直到成器提供给调用方所需的数据,如此循环往复。乍一听,有点像多线程,不明白多线
转载
2023-05-26 17:01:52
77阅读
网上关于Python的协程知识较乱,很多文章说法不一样,遂查原始的资料,再总结一下。内容:认识协程 1、一些基本概念2、协程的特点 3、协程的应用方向Python的协程1、Python2的yeild和send实现协程2、Python的gevent协程框架 3、Python3的asyncio协程框架&n
转载
2023-06-30 13:23:27
144阅读
从一个爬虫说起
Python 2 的时代使用生成器协程,Python 3.7 提供了新的基于 asyncio 和 async / await 的方法。先看一个简单的爬虫代码,爬虫的 scrawl_page 函数为休眠数秒,休眠时间取决于 url 最后的那个数字。
import time
def crawl_page(url):
print('crawling {}'
转载
2024-10-23 16:30:30
7阅读
在学习 Python 基础的过程中,遇到了比较难理解的地方,那就是协程。刚开始看了廖雪峰老师的博客,没怎么看懂,后面自己多方位 google 了一下,再回来看,终于看出了点眉目,在此总结下。什么是 yield 和 yield fromyield在学习协程之前,要先搞懂几个基本语法,那就是 yield 和 yield from,这也是陆续困扰我几天的问题,等这两个概念弄懂以后,后面的事情就比较简单了
转载
2024-02-22 22:54:17
334阅读
引子可以基于单线程来实现并发,即只用一个主线程(很明显可以利用的CPU只有一个)情况下实现并发,我们需要了解并发的本质就是:切换 + 保存状态cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长或有一个优先级更高的程序替代了它。正是这种切换,实现看起来所有任务都被 "同时" 执行的效果,如果多个任务都是
转载
2023-07-04 23:06:34
95阅读
使用过Unity的同学一定知道,Unity提供了一套协程机制,简直不要太好用。但是这个协程依赖于Unity引擎,离开Unity就无法使用。那有没有办法实现不依赖Unity的协程呢?答案是当然阔以。 所谓实现一个协程,就是实现一个迭代器的容器!Unity的协程使用过Unity的同学应该都清楚Unity提供的协程,它可以使用的场景非常广泛。比如我们需要在UI打开的时候,延迟一秒钟播放一个
转载
2024-06-20 16:57:07
95阅读
国内很多互联网公司都使用 Go 语言,其中一个很重要的原因就是 Go 语言优越的性能表现。传统的线程并发编程方式存在着许多不足,在高并发环境下,线程引起的上下文切换、线程的创建和销毁等操作会带来很大的性能和资源消耗,在Java编程中我们也可以选择更加高效的并发编程方式:Java协程coroutine 。节省内存:协程比线程占用的内存更少,因为它不需要维护自己的栈空间和寄存器状态。提高性能:协程比线
转载
2023-09-10 10:31:26
90阅读
异步化框架一部分异步非阻塞、asynciotornado、fastapi、django3.x asgi、aiohttp都在异步化 -->提升性能协程详解协程不是计算机提供,程序员认为创造。协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之:其实就是通过一个线程实现代码块相互切换执行。协程意义:在一个线程中如果遇到IO等待时间,线程不会傻傻等,利用空闲时间
转载
2023-08-18 17:08:35
69阅读
```
def f1(): print(11) yield print(22) yield print(33) def f2(): print(55) yield print(66) yield print(77) v1 = f1()
v2 = f2() next(v1) # v1.send(None)
next...
转载
2019-02-04 11:03:00
91阅读
2评论
1. 关于协程 计算机原理 各种寄存器的介绍:参考 软中断、硬中断:参考"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断"。 golang 的 gmp 原理: 参考 六种内存序的总结:参考 锁机制:参考 linux上下文切换:参考(结合进程空间,搞清楚发生cpu切换的时
转载
2024-06-09 10:43:46
0阅读
一. 协程介绍协程,又称微线程,纤程。英文名Coroutine。子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转
转载
2024-01-30 02:49:20
104阅读
asio 协程中 yield(金庆的专
原创
2023-06-15 16:56:56
152阅读
python-yield实现协程效果
使用yield实现协程效果 1 #!/usr/bin/env python 2 # -*-coding:utf-8 -*- 3 4 import time 5 def consumer(name): 6 print(name) 7 while True: 8 bone = yield #接
转载
2021-04-29 02:14:49
212阅读
2评论
进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈、局部变量和指令指针。 线程和进程各自有什么区别和优劣呢?进程是资源分配的最小单位,线程是程序执行的最小单位。进程有自己的独立地址空间,每启动一个进程,系统就会为它
转载
2023-12-26 06:47:29
24阅读
1. 代码def count(n): print("please enter a number: ") while True: val
原创
2022-07-08 11:22:53
121阅读
查看:https://blog.csdn.net/qq_27825451/article/details/85234610 一,什么是协程(coroutine) 1,协程定义 协程,又称微线程,纤程。英文名Coroutine。协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛
原创
2021-10-15 13:50:28
499阅读
点赞
1评论
一、协程与多线程直接贴两篇大佬文章总结:协程就是由你通过yield return控制执行的函数,你可以通过设置条件在任何时候进出协程,它是普通函数的改良版,它能够不阻塞主线程是通过yield return暂时挂起实现的,和多线程完全不一样,它不具备真正的并行执行能力,它在除了yield return 的其他部分仍然是串行执行每行代码二、协程与迭代器上面第一篇链接里已经讲了一部分,这里再贴一篇深入一
转载
2024-05-15 09:04:29
290阅读
在函数内,yield语句可以作为表达式使用,出现在赋值运算符的右边,例如: def receiver(): pr
原创
2022-06-17 07:00:10
85阅读