python中的greenlet
1.greenlet定义:
gevent中使用的主要模式是greenlet,它是一个轻量级协程,作为C扩展模块提供给python, greenlet都是在主程序的操作系统进程内部运行,但都是协同调度的
在任何给定的时间内,只有一个greenlet在运行
2.并发的概念:
并发是指两个或多个事件在同一时间间隔发生
并发性的核心思想是将一个较大的任务分解为一组子任务,这些子任务被计划为同时或异步运行,而不是一次运行一个或同步运行,简单说就是两个或多个事件在同一时间间隔发生
3.greenlet上下文切换
两个子任务之间的切换称为上下文切换,Greenlet中的上下文切换是通过switch实现的
单个线程内可以运行任意个greenlet协程,不同线程之间不能切换greenlet
4.greenlet代码实例:
from greenlet import greenlet
def fun1(param1,param2):
print("start fun1")
z = gr2.switch(param1+param2) # 切换到协程实例二中执行
print(z)
print("end fun1") # 执行结束,返回主线程
def fun2(param3):
print("start fun2")
print(param3)
gr1.switch(33) # 切换到协程实例一中执行,传递参数给上一个运行节点
print("end fun2") # 不会执行该行代码
if __name__ == "__main__":
gr1 = greenlet(fun1) # 协程实例一
gr2 = greenlet(fun2) # 协程实例二
gr1.switch("hello", 'ketty') # 切换到协程一执行,传入两个参数
print("end main")
运行结果:
python中的greenlet相关推荐
- python中协程实现的本质以及两个封装协程模块greenle、gevent
协程 协程,又称微线程,纤程.英文名Coroutine. 协程是啥 协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源). 为啥说它是一个执行单元,因为 ...
- python如何并发上千个get_用greenlet实现Python中的并发
在上一篇介绍生成器时,我们讲到了协程(Coroutine),它也被称为微线程.回顾一下,协程可以在一个函数执行过程中将其挂起,去执行另一个函数,并在必要时将之前的函数唤醒.在Python的语言环境里, ...
- python中的协程(二)
协程 1.协程: 单线程实现并发 在应用程序里控制多个任务的切换+保存状态 优点: 应用程序级别速度要远远高于操作系统的切换 缺点: 多个任务一旦有一个阻塞没有切,整个线程都阻塞在原地,该线程内的其他 ...
- python中yield使用
16.yield使用 列表推导与生成器表达式 当我们创建了一个列表的时候,就创建了一个可以迭代的对象: >>> squares=[n*n for n in range(3)] > ...
- Python中的协程
Python中的协程 文章目录 Python中的协程 一.什么是协程 1.概念 2.协程的好处 3.缺点 二.了解协程的过程 1.yield工作原理 2.协程在运行过程中有四个状态: 3.预激协程的装 ...
- python中IO多路复用、协程
一.IO多路复用 IO多路复用:检测多个socket是否已经发生变化(是否已经连接成功/是否已经获取数据)(可读/可写) import socket def get_data(key):client ...
- python中文文档-Python语言、主要工具与类库中文文档
Python是Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python 提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量 ...
- python中doc=parased.getroot()_python实例手册.py
python实例手册 #encoding:utf8 # 设定编码-支持中文 0 说明 手册制作: 雪松 littlepy www.51reboot.com 更新日期: 2016-01-21 欢迎系统运 ...
- python多线程好还是多协程好_深入浅析python中的多进程、多线程、协程
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
最新文章
- css垂直居中问题~
- 从数据中心三大趋势看如何做布线规划
- android studio 中 .9.png的制作
- 【Python Flask】SQLAlchemy增删改查总结;不重复查询某一列
- 一个有趣的问题, 你知道SqlDataAdapter中的Fill是怎么实现的吗
- 最新Hadoop环境搭建流程
- FireMonkey ListView 设计期添加按钮及其 OnClick 事件
- 计算机内存不足黑屏怎么办,win10内存不足会黑屏怎么办
- 秦殇千年轮回java游戏下载,智云稳定器如何拍旋转画面 使用稳定器拍摄画面方法...
- illustrator cs5 2学习笔记
- 亚马逊的人工智能Alexa竟然独自大笑 笑声很吓人(附视频)
- Hive中4个By Sort By 、Order By、Distrbute By、 Cluster By区别
- 外科手术器械设计 超声刀设计思路和原理 - 02
- 程序猿必备的数电知识之(逻辑代数基础后半篇)
- 配置 CentOS 7 man 命令帮助显示简体中文
- 在上海软件行业,我见到的年入50万的众生相——我们该如何努力从而达到这个目标...
- HTML页面、CSS样式的以及js学习与介绍
- 【十】搭建基于qemu的仿真环境与应用
- Excel Charting Utility赠品
- 踩坑记录 PIL与Opencv读取图像的差别