gevent 入门篇

gevent 入门篇

并发编程模型主要有: 多进程,多线程,事件驱动, 协程. gevent 是基于协程的异步框架,它需要依赖于greenlet.gevent有什么样的优势? 先来通过一个简单的例子对比同步执行一个方法和使用gevent的异步方式.

普通的单线程同步执行任务

import timedef sync_task():#do somethingtime.sleep(1)def sync_run():start = time.time()for i in range(10):sync_task()end = time.time()print("sync task executed in %f second"%(end-start))

打印结果: async task executed in 10.012671 second

如果换成多线程会是什么情况呢?

import threadingdef multi_thread_run():start = time.time()for i in range(10):t = threading.Thread(target=sync_task)t.start()end = time.time()print("multi thread task executed in %f second"%(end-start))

打印结果是:multi thread task executed in 0.002425 second, 呵呵,这个时间简直亮瞎了, 其实这段程序有问题,子线程还没执行完时,主线程就结束了,因此时间才那么短,其实要稍稍修改:

def multi_thread_run():start = time.time()threads = []for i in range(300):t = threading.Thread(target=sync_task)threads.append(t)t.start()for t in threads:t.join()end = time.time()print("multi thread task executed in %f second"%(end-start))

等所有子线程执行完之后再执行主线程,看看打印结果:

multi thread task executed in 1.002796 second

这是一个比较正常的结果.

换成gevent后会怎样呢?

import gevent
def async_task():#do somethinggevent.sleep(1)def async_run():start = time.time()coroutins = []for i in range(10):coroutins.append(gevent.spawn(async_task))gevent.joinall(coroutins)end = time.time()print("async task executed in %f second"%(end-start))

打印输出:async task executed in 1.002012 second
gevent.spawn()方法会创建一个协程实例,gevent.joinall()是使所有的线程执行完了之后在运行主线程,这跟多线程编程是同样的概念. 发现gevent比多线程也没快多少,那gevent究竟有什么优势.现在假设把上面的10替换成1000,也就是1000线程与1000个coroutine之间的比较,会出现什么结果呢?如果是用线程的话直接报错了:thread.error: can't start new thread.而用协程就不会出现这种问题.

coroutine相比thread的优势在于:

  • 创建threade的成本高,而创建coroutine的成本很低
  • thread的上下文切换成本高,而coroutin的切换速度很快
  • thread的上下文切换取决于cpu,而coroutine由自己控制

先介绍到这里,下次接着聊

参考淺談coroutine與gevent

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrome 渲染器中的对象转换到 RCE

在本文中,我将利用CVE-2024-5830,这是 Chrome 的 JavaScript 引擎 v8 中的一个类型混淆错误,我于 2024 年 5 月将其报告为错误 342456991。该错误已在版本126.0.6478.56/57中修复。此错误允许通过一次访问恶意网站在 Chrome 的渲染器沙箱中执行远程代码执行 (RCE)。 V8 中的…

前端Html5/Css3—div盒子模型

文章目录 第六章 盒子模型6.1 border边框6.2 border-width粗细6.3 border-style边框样式6.4 border简写6.5 margin外边距6.6 padding内边距6.7 盒子模型尺寸6.8 box-sizing6.9 border-radius圆角边框6.9.1 制作圆形6.9.2 半圆6.9.3 四分之一圆 6.10 box-shadow盒子阴影 第六章 …

速盾:中小企业网站cdn加速方案?

中小企业网站在如今的互联网时代中起到了非常重要的作用,能够帮助企业提升品牌形象、增加曝光度、吸引潜在客户等。然而,随着用户对网页加载速度的要求越来越高,网站的访问速度成为决定用户是否留在网站的关键因素之一。为了提升网站的访问速…

通过css,js html结合实现第一个页面

html以及 js代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link …

react调用子组件方法`TS2304: Cannot find name ‘Ref‘`

文章目录 发现宝藏1. 使用正确的 React.Ref 类型2. 使用 React.Ref 或 React.RefObject 作为 ref 类型3. 确保你的 tsconfig.json 设置正确总结 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

【机器学习】独立成分分析的基本概念、应用领域、具体实例(含python代码)以及ICA和PCA的联系和区别

引言 独立成分分析&#xff08;Independent Component Analysis&#xff0c;简称ICA&#xff09;是一种统计方法&#xff0c;用于从多个观察到的混合信号中提取出原始的独立信号源 文章目录 引言一、独立成分分析1.1 定义1.2 独立成分分析的基本原理1.3 独立成分分析的步骤1.3.…

Java重修笔记 第四十三天 Set 集合、HashSet 类

Set 接口 1. 它是无序的&#xff08;添加和取出的顺序不一致&#xff0c;但取出的结果是固定的&#xff09;&#xff0c;没有索引 2. Set 接口也是 Collection 的子接口&#xff0c;所以继承了 Collection 的方法 3. Set 接口的遍历方式有两种&#xff0c;迭代器和增强 for…

计算机专业的真正的就业情况

首先听到计算机行业&#xff0c;大多数人岗位已经饱和&#xff0c;前端已死&#xff0c;程序员35岁危机。但是事实上这些认知都是片面的&#xff0c;今天由我来为大家分析计算机行业的内幕。 疫情过后&#xff0c;过内各种行业都受到了冲击&#xff0c;你们敢说除了体制内的行业…

速盾:高防 CDN 如何提高电子商务网站的性能和用户体验?

随着电子商务的迅速发展&#xff0c;电子商务网站的性能和用户体验成为了至关重要的因素。其中&#xff0c;高防 CDN&#xff08;内容分发网络&#xff09;可以为电子商务网站提供很大的帮助&#xff0c;使其能够提高性能和用户体验。下面将详细介绍高防 CDN 如何实现这一目标。…

RACL: Adversarially Robust Neural Architectures

RACL: 对抗鲁棒网络架构 论文链接&#xff1a;https://arxiv.org/abs/2009.00902v2 Abstract 深度神经网络(DNN)容易受到对抗性攻击。现有的方法致力于开发各种鲁棒训练策略或正则化来更新神经网络的权值。但除了权重之外&#xff0c;网络中的整体结构和信息流是由网络架构明…

模块一(任务3):WDM系统原理解读

一、WDM的概念及波段划分 1、WDM系统概念 WDM系统就像高铁系统一样&#xff0c;这里可以将一根光纤看做是一个多车道的高速铁路。 把不同波长的光信号组合起来&#xff08;也就是复用&#xff09;&#xff0c;进入到同一根光纤中进行传输&#xff0c;在接收端将组合波长的光信…

图形学论文笔记

文章目录 PBD&#xff1a;XPBD&#xff1a;shape matching PBD&#xff1a; 【深入浅出 Nvidia FleX】(1) Position Based Dynamics 最简化的PBD(基于位置的动力学)算法详解-论文原理讲解和太极代码 最简化的PBD(基于位置的动力学)算法详解-论文原理讲解和太极代码 XPBD&…

​经​纬​恒​润​一​面​

1. 请尽可能详细地说明&#xff0c;浏览器有哪些本地存储方式&#xff0c;区别是什么&#xff0c;应用场景是什么&#xff1f;你的回答中不要写出示例代码。 浏览器提供了多种本地存储方式&#xff0c;主要包括以下几种&#xff1a; 1. Cookies 定义&#xff1a;Cookies 是一…

向量数据库Faiss的详细介绍和搭建使用教程

一、Faiss简介 向量数据库Faiss&#xff08;Facebook AI Similarity Search&#xff09;是由Facebook AI研究院&#xff08;FAIR&#xff09;开发的一种高效的相似性搜索和聚类库。Faiss能够快速处理大规模数据&#xff0c;支持在高维空间中进行相似性搜索。它通过将候选向量集…

数据库mysql集群主从、高可用MGR、MHA技术详解

一、安装数据库mysql步骤 环境&#xff1a;红帽7.9系统 安装依赖 yum install cmake gcc-c openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 -y 将下载的MySQL软件包解压并cd到mysql的目录下 [rootmysql-node10 ~]# tar zxf mysq…

数据结构(邓俊辉)学习笔记】优先级队列 08——左式堆:结构

文章目录 1. 第一印象2. 堆之合并3. 奇中求正4. NPL5. 左倾性6. 左展右敛 1. 第一印象 在学习过常规的完全二叉堆之后&#xff0c;我们再来学习优先级队列的另一变种&#xff0c;也就是左式堆。所谓的左式堆&#xff0c;也就是在拓扑形态上更加倾向于向左侧倾斜的一种堆&#…

洛谷刷题(4)

P1089 [NOIP2004 提高组] 津津的储蓄计划 题目描述 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 元钱&#xff0c;津津会预算这个月的花销&#xff0c;并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄&#xff0c;妈妈提出&#xff0c;津津可以随…

UE5打包iOS运行查看Crash日志

1、查看Crash 1、通过xCode打开设备 2、选择APP打开最近的日志 3、选择崩溃时间点对应的日志 4、选择对应的工程打开 5、就能看到对应的Crash日志 2、为了防止Crash写代码需要注意 1、UObject在Remov

sqlsugar 不映射字段,sqlsugar 忽略字段。sqlsugar 字段改名。

sqlsugar 不映射字段&#xff0c;sqlsugar 忽略字段。 利用特性SugarColumn&#xff0c;将IsIgnore设置为True即可&#xff01; [SugarColumn(IsIgnore true)]//sqlsugar 忽略字段 public decimal MaxTemp { get; set; } 这样Sqlsugar 增删改查数据库的时候自动跳过该字段&…

Nextjs(App Router) 开发记录

最近业余在开发一款智能助理产品&#xff0c;记录开发过程中的一些问题以备忘&#xff0c;也是帮其他人防坑。 主要技术栈 本项目采用了前沿的技术栈来构建一个高性能且可维护的应用。选择了 Nx 作为构建管理和单一代码库解决方案&#xff0c;通过模块化和插件系统来扩展和优…