python入门开发学习笔记之掌握greenlet模块

python协程的实现(greenlet源码分析) 基本上读完了greenlet的源代码,代码不多,就2000行C语言的代码,其中有一部分栈寄存器的修改的代码是由汇编实现的。。。 一句话来说明greenlet的实现原理:通过栈的复制切换来实现不同协程之间的切换。。。 那么接下里来具体的来看看greenlet的代码到底是怎么实现的。。。 阅读详情

本节重点

掌握greenlet模块
本节时长需控制在5分钟内

一 greenlet模块

如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send。。。非常麻烦),而使用greenlet模块可以非常简单地实现这20个任务直接的切换

#安装:pip3 install greenlet
from greenlet import greenlet

def eat(name):
    print('%s eat 1' %name)
    g2.switch('egon')
    print('%s eat 2' %name)
    g2.switch()
def play(name):
    print('%s play 1' %name)
    g1.switch()
    print('%s play 2' %name)

g1=greenlet(eat)
g2=greenlet(play)

g1.switch(‘egon’)#可以在第一次switch时传入参数,以后都不需要
单纯的切换(在没有io的情况下或者没有重复开辟内存空间的操作),反而会降低程序的执行速度

#顺序执行
import time
def f1():
    res=1
    for i in range(100000000):
        res+=i

def f2():
    res=1
    for i in range(100000000):
        res*=i

start=time.time()
f1()
f2()
stop=time.time()
print('run time is %s' %(stop-start)) #10.985628366470337

#切换
from greenlet import greenlet
import time
def f1():
    res=1
    for i in range(100000000):
        res+=i
        g2.switch()

def f2():
    res=1
    for i in range(100000000):
        res*=i
        g1.switch()

start=time.time()
g1=greenlet(f1)
g2=greenlet(f2)
g1.switch()
stop=time.time()
print('run time is %s' %(stop-start)) # 52.763017892837524

greenlet只是提供了一种比generator更加便捷的切换方式,当切到一个任务执行时如果遇到io,那就原地阻塞,仍然是没有解决遇到IO自动切换来提升效率的问题。

单线程里的这20个任务的代码通常会既有计算操作又有阻塞操作,我们完全可以在执行任务1时遇到阻塞,就利用阻塞的时间去执行任务2。。。。如此,才能提高效率,这就用到了Gevent模块。

解决Python环境_greenlet模块缺失:从依赖冲突到打包部署的完整指南 在Python开发中,C扩展模块的依赖管理是环境配置的核心挑战之一。这类模块通过编译为二进制文件(如.pyd或.so)与Python解释器交互,其运行依赖于系统级的动态链接库和运行时环境。当环境发生变化时,例如虚拟环境迁移或应用打包部署,这些二进制模块可能因依赖链断裂而无法加载,导致“找不到指定模块”的错误。从技术价值看,正确处理此类问题能确保应用的跨平台兼容性和部署可靠性,尤其在自动化测试、Web爬虫和桌面应用打包等场景中至关重要。本文聚焦于greenlet模块加载失败这一典型案例,深入剖析其与系统运行时 阅读详情

相关推荐

协程[greenlet模块,Gevent模块]

必须在只有一个单线程里实现并发修改共享数据不需加锁用户程序里自己保存多个控制流的上下文栈对于实现协程来说,要实现保存状态加切换 并且需要在遇到 IO 时能够切换: 实例化一个协程对象spawn括号内第一个参数是函数名,如eat,后面可以有多个参数,可以是位置实参或关键字实参,都是传给函数eat的g1.join(): 等待g1结束g2.join(): 等待g2结束: 将上述两部合成一步g1.value: 拿到func1的返回值。......

Yietong的博客 599

Python之greenlet学习

greenlet官方文档:点击打开链接 以下内容主要是理解官方文档而来. greenlet    greenlet是python的并行处理的一个库。 python 有一个非常有名的库叫做 stackless ,用来做并发处理, 主要是弄了个叫做tasklet的微线程的东西, 而greenlet 跟stackless的最大区别是greenlet需要你自己来处理线程切换, 就是说,你需要自己指定

不忘初心,方得始终 8969

greenlet-0.4.15-cp38-cp38-win_amd64.whl

python3.8版本的greenlet wheel文件,pip安装某个库失败的时候,如果提示greenlet安装失败,可以用这个wheel文件安装

Python--协程(greenlet 模块、Gevent 模块)

协程介绍以及特点;greenlet 模块;Gevent 模块;

weixin_43988680的博客 969

AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解

是一个复杂但核心的动画管理器。它利用 Android 的远程动画机制,拦截系统默认的窗口切换,并替换为高度定制、与 Launcher UI 深度集成的平滑过渡动画。当用户从一个应用程序通过手势或按键返回到 Launcher (桌面) 时,它负责创建和运行动画,使得应用程序窗口能够平滑地过渡(通常是缩小)到 Launcher 上的对应目标(图标、小部件或屏幕中心),同时 Launcher 界面元素(工作区、背景等)恢复显示。计算动画所需的各种参数,如窗口的起始/结束位置、缩放比例、透明度、圆角、裁剪区域等。

Micheal_Yang's Blog 2670

浙大数值分析lab2

最可怕的一道题,题目是这样的 Root of a Polynomial A polynomial of degree nnn has the common form as p(x)=cnxn+cn−1xn−1+⋯+c1x+c0p(x)=c_n x^n + c_{n-1} x^{n-1} + \cdots + c_1 x + c_0p(x)=c​n​​x​n​​+c​n−1​​x​

yao_zou的博客 4797

Python 协程详解

什么是协程 Python 对协程的支持经历了多个版本: 一、协程实现方法: 1、greenlet,早期模块 2、yield关键字(Python2.x开始) 3、asyncio装饰器(Python 3.4开始) 4、async、await关键字(Python 3.5开始) 5、gevent 二、协程的运行原理 三、协程应用场景 1、抢占式调度的缺点 2、用户态协同调度的优势 四、协程使用注意事项...

c_lanxiaofang的博客 1万+

STM32H7 FOC控制时序优化与PWM中点更新策略

在永磁同步电机(PMSM)的磁场定向控制(FOC)系统中,控制时序精度是决定电流环带宽、观测器收敛性与动态响应能力的基础要素。其核心在于理解PWM生成、ADC采样与控制计算三者之间的硬件级时间耦合关系——尤其在中心对齐模式下,标准更新机制引入的半周期延迟会破坏电压-电流瞬时映射,导致滑模观测器失配与高频相位滞后。通过将PWM更新事件绑定至重复计数器(RCR)清零点,可实现控制指令在开关周期中点生效,使等效电压矢量中心与计算时刻严格对齐。该策略显著提升系统确定性,为20 kHz以上高频电流环提供物理支撑,并广

flink9streamer的博客 857

【专题】python中的协程库—greenlet和gevent

Python 的协程库 greenlet 和 gevent

qq_36581961的博客 1069

zynq7020的arm A9核降频实录

zynq arm9 cortex a9 降频

qq_40011737的博客 8765

Ollama内网离线部署大模型实战:从模型文件到私有化服务

本文详细介绍了如何在内网离线环境下,利用Ollama部署私有化大模型服务。内容涵盖从获取GGUF格式模型文件、手动安装Ollama、编写核心Modelfile配置文件,到创建运行模型、性能调优及安全加固的全流程实战指南,旨在帮助企业安全、可控地构建内部AI能力。

weixin_29209805的博客 214

协程----greenlet模块,gevent模块

1.协程初识,greenlet模块 2.gevent模块(需要pip安装) 一.协程初识,greenlet模块: 协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。 greenlet模块要自己用pip安装 #协程: #本质上是一个线程 #能够在多个...

weixin_30765475的博客 265

泰凌微8258入门教程——导读

基于泰凌微TLSR8258 Bluetooth® SIG Mesh 的入门系列教程

2万+

python中的greenlet

1.greenlet定义: gevent中使用的主要模式是greenlet,它是一个轻量级协程,作为C扩展模块提供给python, greenlet都是在主程序的操作系统进程内部运行,但都是协同调度的 在任何给定的时间内,只有一个greenlet在运行 2.并发的概念: 并发是指两个或多个事件在同一时间间隔发生 并发性的核心思想是将...

u011089760的博客 2840

基于Claude Code的 规范驱动开发(SDD)指南

传统的AI辅助开发,如同手工作坊,我们向AI描述想法,它给我们零散的部件,我们再手动打磨、组装。这个过程充满了不确定性、信息损耗和重复劳动。本指南将尝试引领您进入软件开发的“工业时代”。在这里,

形上得其象,形下合于数;阴阳自济,玄理自明。 2749

华为OD新系统机试真题 - 失灵的键盘(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题 【失灵的键盘】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD4月15号机试真题【失灵的键盘】

qq_45776114的博客 1068

python协程入门(greenlet)

基本上greenlet的大体的东西都看的差不多了,看代码好久没有这么费劲过了,

fjs的专栏 2744

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

gevent 学习笔记 —— greenlet源码剖析1

在greenlet篇中只是简单讲述了一下greenlet原理,不知道有没有人对源码感兴趣的,不过我还是比较感兴趣的。对于技术我一直都觉得『知其然,知其所以然』才是最好的,不希望自己只停留在知道用,而不知道为什么这样用。 一篇可能介绍不完,所以可能需要分几部分来介绍。当我写到这的时候突然发现自己是不是写跑题了,本来是写greenlet源码分析的,结果变成了怎么去写Python扩展了。不过不管怎样,

zlklove1234的专栏 376

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python3 greenlet模块

pip install greenlet # -*- coding: utf-8 -*- from greenlet import greenlet def func1(): print("func1 first") gr2.switch() print("func2 second") gr2.switch() def ...

ddxr5515的博客 345

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

4-2、greenlet模块

一 greenlet模块 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send。。。非常麻烦),而使用greenlet模块可以非常简单地实现这20个任务直接的切换 #安装:pip3 install greenlet from greenlet import greenlet def eat(nam...

vettel2018的博客 157

Python程序中的协程操作-greenlet模块

目录 一、安装模块 二、greenlet实现状态切换 三、效率对比 一、安装模块 安装:pip3 install greenlet 二、greenlet实现状态切换 from greenlet import greenlet def eat(name): print('%s...

weixin_30649859的博客 162

Python的requests、greenlet和gevent模块在windows下安装

一、requests模块在windows下安装 Linux系统下requests的安装方法在http://docs.python-requests.org/en/latest/user/install/#install很详细。 这里主要写的是在Windows下安装requests模块的方法。 1.1、下载requests安装包(.zip文件) 地址:https://github...

weixin_30951743的博客 403

python 协程 greenlet

greenlet 为了更好使用协程来完成多任务,python中的greenlet模块对其封装,从而使得切换任务变的更加简单 安装方式 使用如下命令安装greenlet模块: sudo pip3 install greenlet #coding=utf-8 from greenlet import greenlet import time def test1(): while True...

kai46385076的专栏 145

Python—协程-greenlet

greenlet 为了更好使用协程来完成多任务,python中的greenlet模块对其封装,从而使得切换任务变的更加简单 安装方式 使用如下命令安装greenlet模块: sudo pip3 install greenlet #coding=utf-8 from greenlet import greenlet import time def test1(): whi...

安藤青司的博客 161

greenlet 模块源码

模块初始化 greenlet是用C编写的一个扩展模块,即用Python去调用C程序。像下面这段代码,内部都是怎样的一个过程呢? from greenlet import greenlet def test1(): print 12 gr2.switch() print 34 def test2(): print 56 gr1.switch()

zongyimin的博客 1165

Python-Greenlet项目解析:Greenlet与Python线程的交互机制

在Python并发编程领域,greenlet提供了一种轻量级的协程实现方式。本文将深入探讨python-greenlet项目中greenlet与Python标准线程(threading模块)的交互机制,帮助开发者理解两者结合使用的边界条件和最佳实践。 ## Greenlet与线程的基本关系 greenlet可以看作是一种微线程,它允许在单线程内实现协程式的并发。当与Python标准线程结合使用

gitblog_01149的博客 545
上一篇: python入门学习笔记之掌握什么是协程
下一篇: python入门开发学习笔记之掌握gevent模块
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值