监控 Python 内存使用情况和代码执行时间

我的代码的哪些部分运行时间最长、内存最多?我怎样才能找到需要改进的地方?”

在开发过程中,我很确定我们大多数人都会想知道这一点,在本文中总结了一些方法来监控 Python 代码的时间和内存使用情况。

本文将介绍4种方法,前3种方法提供时间信息,第4个方法可以获得内存使用情况。

  • time 模块
  • %%time 魔法命令
  • line_profiler
  • memory_profiler

 1. time 模块

这是计算代码运行所需时间的最简单、最直接(但需要手动开发)的方法。他的逻辑也很简单:记录代码运行之前和之后的时间,计算时间之间的差异。这可以实现如下:

 import time

 start_time = time.time()
 result = 5+2
 end_time = time.time()

 print('Time taken = {} sec'.format(end_time - start_time))

下面的例子显示了for循环和列表推导式在时间上的差异:

 import time

 # for loop vs. list comp
 list_comp_start_time = time.time()
 result = [i for i in range(0,1000000)]
 list_comp_end_time = time.time()
 print('Time taken for list comp = {} sec'.format(list_comp_end_time - list_comp_start_time))

 result=[]
 for_loop_start_time = time.time()
 for i in range(0,1000000):
     result.append(i)
 for_loop_end_time = time.time()
 print('Time taken for for-loop = {} sec'.format(for_loop_end_time - for_loop_start_time))

 list_comp_time = list_comp_end_time - list_comp_start_time
 for_loop_time = for_loop_end_time - for_loop_start_time
 print('Difference = {} %'.format((for_loop_time - list_comp_time)/list_comp_time * 100))

我们都知道for会慢一些

 Time taken for list comp = 0.05843973159790039 sec
 Time taken for for-loop = 0.06774497032165527 sec
 Difference = 15.922795107582594 %

 2. %%time 魔法命令

魔法命令是IPython内核中内置的方便命令,可以方便地执行特定的任务。一般情况下都实在jupyter notebook种使用。

在单元格的开头添加%%time ,单元格执行完成后,会输出单元格执行所花费的时间。

 %%time
 def convert_cms(cm, unit='m'):
     '''
    Function to convert cm to m or feet
    '''
     if unit == 'm':
         return cm/100
     return cm/30.48

 convert_cms(1000)

结果如下:

 CPU timesuser 24 µssys: 1 µstotal: 25 µs
 Wall time: 28.1 µs

 Out[8]: 10.0

这里的CPU times是CPU处理代码所花费的实际时间,Wall time是事件经过的真实时间,在方法入口和方法出口之间的时间。

 3. line_profiler

前两个方法只提供执行该方法所需的总时间。通过时间分析器我们可以获得函数中每一个代码的运行时间。

这里我们需要使用line_profiler包。使用pip install line_profiler。

 import line_profiler

 def convert_cms(cm, unit='m'):
     '''
    Function to convert cm to m or feet
    '''
     if unit == 'm':
         return cm/100
     return cm/30.48

 # Load the profiler
 %load_ext line_profiler

 # Use the profiler's magic to call the method
 %lprun -f convert_cms convert_cms(1000'f')

输出结果如下:

 Timer unit: 1e-06 s

 Total time: 4e-06 s
 File: /var/folders/y_/ff7_m0c146ddrr_mctd4vpkh0000gn/T/ipykernel_22452/382784489.py
 Function: convert_cms at line 1

 Line #     Hits         Time Per Hit   % Time Line Contents
 ==============================================================
      1                                           def convert_cms(cm, unit='m'):
      2                                               '''
      3                                               Function to convert cm to m or feet
      4                                               '''
      5         1         2.0     2.0     50.0     if unit == 'm':
      6                                                   return cm/100
      7         1         2.0     2.0     50.0     return cm/30.48

可以看到line_profiler提供了每行代码所花费时间的详细信息。

  • Line Contents :运行的代码
  • Hits:行被执行的次数
  • Time:所花费的总时间(即命中次数x每次命中次数)
  • Per Hit:一次执行花费的时间,也就是说 Time =  Hits X Per Hit
  • % Time:占总时间的比例

可以看到,每一行代码都详细的分析了时间,这对于我们分析时间相当的有帮助。

 4. memory_profiler

与line_profiler类似,memory_profiler提供代码的逐行内存使用情况。

要安装它需要使用pip install memory_profiler。我们这里监视convert_cms_f函数的内存使用情况

 from conversions import convert_cms_f
 import memory_profiler

 %load_ext memory_profiler

 %mprun -f convert_cms_f convert_cms_f(1000'f')

convert_cms_f函数在单独的文件中定义,然后导入。结果如下:

 Line #   Mem usage   Increment Occurrences   Line Contents
 =============================================================
      1     63.7 MiB     63.7 MiB           1   def convert_cms_f(cm, unit='m'):
      2                                             '''
      3                                             Function to convert cm to m or feet
      4                                             '''
      5     63.7 MiB     0.0 MiB           1       if unit == 'm':
      6                                                 return cm/100
      7     63.7 MiB     0.0 MiB           1       return cm/30.48memory_profiler 提供对每行代码内存使用情况的详细了解。

这里的1 MiB (MebiByte) 几乎等于 1MB。1 MiB  = 1.048576 1MB

但是memory_profiler 也有一些缺点:它通过查询操作系统内存,所以结果可能与 python 解释器略有不同,如果在会话中多次运行 %mprun,可能会注意到增量列报告所有代码行为 0.0 MiB。这是因为魔法命令的限制导致的。

虽然memory_profiler有一些问题,但是它就使我们能够清楚地了解内存使用情况,对于开发来说是一个非常好用的工具

 5. 总结一下

虽然Python并不是一个以执行效率见长的语言,但是在某些特殊情况下这些命令对我们还是非常有帮助的。

转自:https://mp.weixin.qq.com/s/oKm5oDVsXxX8UZd7FUQaFg

一台服务器最大能支持多少条 TCP 连接

推荐关注↓

作者:文攀

https://juejin.cn/post/7162824884597293086

一、一台服务器最大能打开的文件数

1、限制参数

我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是:

  • fs.file-max (系统级别参数):该参数描述了整个系统可以打开的最大文件数量。但是root用户不会受该参数限制(比如:现在整个系统打开的文件描述符数量已达到fs.file-max ,此时root用户仍然可以使用ps、kill等命令或打开其他文件描述符)
  • soft nofile(进程级别参数):限制单个进程上可以打开的最大文件数。只能在Linux上配置一次,不能针对不同用户配置不同的值
  • fs.nr_open(进程级别参数):限制单个进程上可以打开的最大文件数。可以针对不同用户配置不同的值

这三个参数之间还有耦合关系,所以配置值的时候还需要注意以下三点:

  1. 如果想加大soft nofile,那么hard nofile参数值也需要一起调整。如果因为hard nofile参数值设置的低,那么soft nofile参数的值设置的再高也没有用,实际生效的值会按照二者最低的来。

  2. 如果增大了hard nofile,那么fs.nr_open也都需要跟着一起调整(fs.nr_open参数值一定要大于hard nofile参数值)。如果不小心把hard nofile的值设置的比fs.nr_open还大,那么后果比较严重。会导致该用户无法登录,如果设置的是*,那么所有用户都无法登录

  3. 如果加大了fs.nr_open,但是是用的echo “xxx” > ../fs/nr_open命令来修改的fs.nr_open的值,那么刚改完可能不会有问题,但是只要机器一重启,那么之前通过echo命令设置的fs.nr_open值便会失效,用户还是无法登录。所以非常不建议使用echo的方式修改内核参数!!!

2、调整服务器能打开的最大文件数示例

假设想让进程可以打开100万个文件描述符,这里用修改conf文件的方式给出一个建议。如果日后工作里有类似的需求可以作为参考。

  • vim /etc/sysctl.conf
fs.file-max=1100000 // 系统级别设置成110万,多留点buffer
fs.nr_open=1100000 // 进程级别也设置成110万,因为要保证比 hard nofile大
  • 使上面的配置生效sysctl -p

  • vim /etc/security/limits.conf

// 用户进程级别都设置成100完
soft nofile 1000000
hard nofile 1000000

二、一台服务器最大能支持多少连接

我们知道TCP连接,从根本上看其实就是client和server端在内存中维护的一组【socket内核对象】(这里也对应着TCP四元组:源IP、源端口、目标IP、目标端口),他们只要能够找到对方,那么就算是一条连接。那么一台服务器最大能建立多少条连接呢?

  • 由于TCP连接本质上可以理解为是client-server端的一对socket内核对象,那么从理论上将应该是【2^32 (ip数) * 2^16 (端口数)】条连接(约等于两百多万亿)
  • 但是实际上由于受其他软硬件的影响,我们一台服务器不可能能建立这么多连接(主要是受CPU和内存限制)。

如果只以ESTABLISH状态的连接来算(这些连接只是建立,但是不收发数据也不处理相关的业务逻辑)那么一台服务器最大能建立多少连接呢?以一台4GB内存的服务器为例!

  • 这种情况下,那么能建立的连接数量主要取决于【内存的大小】(因为如果是)ESTABLISH状态的空闲连接,不会消耗CPU(虽然有TCP保活包传输,但这个影响非常小,可以忽略不计)
  • 我们知道一条ESTABLISH状态的连接大约消耗【3.3KB内存】,那么通过计算得知一台4GB内存的服务器,【可以建立100w+的TCP连接】(当然这里只是计算所有的连接都只建立连接但不发送和处理数据的情况,如果真实场景中有数据往来和处理(数据接收和发送都需要申请内存,数据处理便需要CPU),那便会消耗更高的内存以及占用更多的CPU,并发不可能达到100w+)

上面讨论的都是进建立连接的理想情况,在现实中如果有频繁的数据收发和处理(比如:压缩、加密等),那么一台服务器能支撑1000连接都算好的了,所以一台服务器能支撑多少连接还要结合具体的场景去分析,不能光靠理论值去算。抛开业务逻辑单纯的谈并发没有太大的实际意义。

服务器的开销大头往往并不是连接本身,而是每条连接上的数据收发,以及请求业务逻辑处理!!!

三、一台客户端机器最多能发起多少条连接

我们知道客户端每和服务端建立一个连接便会消耗掉client端一个端口。一台机器的端口范围是【0 ~ 65535】,那么是不是说一台client机器最多和一台服务端机器建立65535个连接呢(这65535个端口里还有很多保留端口,可用端口可能只有64000个左右)?

由TCP连接的四元组特性可知,只要四元组里某一个元素不同,那么就认为这是不同的TCP连接。所以需要分情况讨论:

  • 【情况一】、如果一台client仅有一个IP,server端也仅有一个IP并且仅启动一个程序,监听一个端口的情况下,client端和这台server端最大可建立的连接条数就是 65535 个。

因为源IP固定,目标IP和端口固定,四元组中唯一可变化的就是【源端口】,【源端口】的可用范围又是【0 ~ 65535】,所以一台client机器最大能建立65535个连接

  • 【情况二】、如果一台client有多个IP(假设客户端有 n 个IP),server端仅有一个IP并且仅启动一个程序,监听一个端口的情况下,一台client机器最大能建立的连接条数是:n * 65535 个

因为目标IP和端口固定,有 n 个源IP,四元组中可变化的就是【源端口】+ 【源IP】,【源端口】的可用范围又是【0 ~ 65535】,所以一个IP最大能建立65535个连接,那么n个IP最大就能建立 n * 65535个连接了

以现在的技术,给一个client分配多个IP是非常容易的事情,只需要去联系你们网管就可以做到。

  • 【情况三】、如果一台client仅有一个IP,server端也仅有一个IP但是server端启动多个程序,每个程序监听一个端口的情况下(比如server端启动了m个程序,监听了m个不同端口),一台client机器最大能建立的连接数量为:65535 * m

源IP固定,目标IP固定,目标端口数量为m个,可变化的是源端口,而源端口变化范围是【0 ~ 65535】,所以一台client机器最大能建立的TCP连接数量是 65535 * m个

  • 其余情况类推,但是客户端的可用端口范围一般达不到65535个,受内核参数net.ipv4.ip_local_port_range限制,如果要修改client所能使用的端口范围,可以修改这个内核参数的值。

  • 所以,不光是一台server端可以接收100w+个TCP连接,一台client照样能发出100w+个连接

四、其他

  • 三次握手里socket的全连接队列长度由参数net.core.somaxconn来控制,默认大小是128,当两台机器离的非常近,但是建立连接的并发又非常高时,可能会导致半连接队列或全连接队列溢出,进而导致server端丢弃握手包。然后造成client超时重传握手包(至少1s以后才会重传),导致三次握手连接建立耗时过长。我们可以调整参数net.core.somaxconn来增加去按连接队列的长度,进而减小丢包的影响

  • 有时候我们通过 ctrl + c方式来终止了某个进程,但是当重启该进程的时候发现报错端口被占用,这种问题是因为【操作系统还没有来得及回收该端口,等一会儿重启应用就好了】

  • client程序在和server端建立连接时,如果client没有调用bind方法传入指定的端口,那么client在和server端建立连接的时候便会自己随机选择一个端口来建立连接。一旦我们client程序调用了bind方法传入了指定的端口,那么client将会使用我们bind里指定的端口来和server建立连接。所以不建议client调用bind方法,bind函数会改变内核选择端口的策略

public static void main(String[] args) throws IOException {
    SocketChannel sc = SocketChannel.open();
   // 客户端还可以调用bind方法
    sc.bind(new InetSocketAddress("localhost", 9999));
    sc.connect(new InetSocketAddress("localhost", 8080));
    System.out.println("waiting..........");
}
  • 在Linux一切皆文件,当然也包括之前TCP连接中说的socket。进程打开一个socket的时候需要创建好几个内核对象,换一句直白的话说就是打开文件对象吃内存,所以Linux系统基于安全角度考虑(比如:有用户进程恶意的打开无数的文件描述符,那不得把系统搞奔溃了),在多个位置都限制了可打开的文件描述符的数量。

  • 内核是通过【hash表】的方式来管理所有已经建立好连接的socket,以便于有请求到达时快速的通过【TCP四元组】查找到内核中对应的socket对象

在epoll模型中,通过红黑树来管理epoll对象所管理的所有socket,用红黑树结构来平衡快速删除、插入、查找socket的效率

五、相关实际问题

在网络开发中,很多人对一个基础问题始终没有彻底搞明白,那就是一台机器最多能支撑多少条TCP连接。不过由于客户端和服务端对端口使用方式不同,这个问题拆开来理解要容易一些。

注意,这里说的是客户端和服务端都只是角色,并不是指某一台具体的机器。例如对于我们自己开发的应用程序来说,当他响应客户端请求的时候,他就是服务端。当他向MySQL请求数据的时候,他又变成了客户端。

1、”too many open files” 报错是怎么回事,该如何解决

你在线上可能遇到过too many open files这个错误,那么你理解这个报错发生的原理吗?如果让你修复这个错误,应该如何处理呢?

  • 因为每打开一个文件(包括socket),都需要消耗一定的内存资源。为了避免个别进程不受控制的打开了过多文件而让整个服务器奔溃,Linux对打开的文件描述符数量有限制。如果你的进程触发到内核的限制,那么”too many open files” 报错就产生了
  • 可以通过修改fs.file-max 、soft nofile、fs.nr_open这三个参数的值来修改进程能打开的最大文件描述符数量

需要注意这三个参数之间的耦合关系!

2、一台服务端机器最大究竟能支持多少条连接

因为这里要考虑的是最大数,因此先不考虑连接上的数据收发和处理,仅考虑ESTABLISH状态的空连接。那么一台服务端机器上最大可以支持多少条TCP连接?这个连接数会受哪些因素的影响?

  • 在不考虑连接上数据的收发和处理的情况下,仅考虑ESTABLISH状态下的空连接情况下,一台服务器上最大可支持的TCP连接数量基本上可以说是由内存大小来决定的。
  • 四元组唯一确定一条连接,但服务端可以接收来自任意客户端的请求,所以根据这个理论计算出来的数字太大,没有实际意义。另外文件描述符限制其实也是内核为了防止某些应用程序不受限制的打开【文件句柄】而添加的限制。这个限制只要修改几个内核参数就可以加大。
  • 一个socket大约消耗3kb左右的内存,这样真正制约服务端机器最大并发数的就是内存,拿一台4GB内存的服务器来说,可以支持的TCP连接数量大约是100w+

3、一条客户端机器最大究竟能支持多少条连接

和服务端不同的是,客户端每次建立一条连接都需要消耗一个端口。在TCP协议中,端口是一个2字节的整数,因此范围只能是0~65535。那么客户单最大只能支持65535条连接吗?有没有办法突破这个限制,有的话有哪些办法?

  • 客户度每次建立一条连接都需要消耗一个端口。从数字上来看,似乎最多只能建立65535条连接。但实际上我们有两种办法破除65535这个限制

方式一,为客户端配置多IP 方式二,分别连接不同的服务端

  • 所以一台client发起百万条连接是没有任何问题的

4、做一个长连接推送产品,支持1亿用户需要多少台机器

假设你是系统架构师,现在老板给你一个需求,让你做一个类似友盟upush这样的产品。要在服务端机器上保持一个和客户端的长连接,绝大部分情况下连接都是空闲的,每天也就顶多推送两三次左右。总用户规模预计是1亿。那么现在请你来评估一下需要多少台服务器可以支撑这1亿条长连接。

  • 对于长连接推送模块这种服务来说,给客户端发送数据只是偶尔的,一般一天也就顶多一两次。绝大部分情况下TCP连接都是空闲的,CPU开销可以忽略
  • 再基于内存来考虑,假设服务器内存是128G的,那么一台服务器可以考虑支持500w条并发。这样会消耗掉大约不到20GB内存用来保存这500w条连接对应的socket。还剩下100GB以上的内存来应对接收、发送缓冲区等其他的开销足够了。所以,一亿用户,仅仅需要20台服务器就差不多够用了!

– EOF

转型素质教育,教培头部公司进展如何 ?

教育部:调整部分直属事业单位

导语

在过去的2022年,素质教育成为各大教培公司寻求转型和探索新商业模式的重要方向。

 

该方向的确认和转型,得益于现时代家长们对孩子综合素质提升的需求,对应市场规模逐渐增长。根据投行摩根士丹利2022年9月报告数据,随着人们对素质教育为主的非学科辅导需求增加,非学科辅导市场规模2022年增速达14%,达到5770亿元人民币,而2021年该市场为5050亿元人民币,本年度市场规模增长720亿元。

 

国内对素质教育的支持,可以追溯至1999年“深化教育改革,全面推进素质教育”主题会议的召开,全国正式推广素质教育。 中国教育报《探寻素质教育的真谛》一文中提到,“此后每一年的政府工作报告,素质教育都有涉及。2006年,《义务教育法》重新修订,素质教育被写入其中……到了2010年,《国家中长期教育改革和发展规划纲要(2010—2020》出台,实施素质教育被提升到我国教育改革发展的战略主题的高度。”

 

2022年5月,教育部明确其“有益补充的位置”:“规范非学科类校外培训行为,引导其成为学校教育的有益补充。”同月,教育部发布《义务教育劳动课程标准(2022年版)》, 课程目标是提高学生对劳动意义的认识,逐步培养劳动观点,养成劳动习惯,具有初步的生活自理能力,并掌握一些简单的劳动知识和技能。 劳动素质方向的知识能力提升,以课堂内为主,在课堂外,也为行业公司提供了更广泛的产品服务机会。 

 

至此,各大教培公司在合规的前提下,2022这一年开启了新业务重心的探索与经营。接下来,我们将与大家一起回顾,它们这一年的重要进展与表现:

1

新东方

2022年10月,新东方最新披露的季度财报数据显示(2023财年第一季度,截至2022年8月),2022财年下半年以来该公司已在60多个城市推出素质教育等非学科教育业务,最新财季入学人数为29.7万人。按照千元级别的课程定价,该项业务贡献营收超过亿元,这意味着该公司在素质教育等业务上取得了重要进展。

根据最新官方信息,当前新东方公司的素质教育业务,提供素养课、素质课两大类。其中素养课包括故事表演、口才、写字、脑力等学习课程。而素质课程包括编程、美术、机器人、科学等课程。

转型素质教育,教培头部公司进展如何 ?

两大类课程均提供低价公开课以及相对高价的正价课程。公开课通常定价在10元以下,例如定价在1.5元的python线上编程公开课、美术公开课等。而正价课通常在数百元至数千元不等,例如少儿智力脑开发课程定价为1920元,而少儿双语故事表演课程定价在2400元。

除致力于知识文化与脑力类素质素养课程,游学营地、户外素质拓展,也是新东方公司为学生用户培养多方面素质能力的产品服务。根据官网,该方向业务提供国内研学,例如人文素养、自然教育、科技探索、户外运动、名校名企等户外拓展体验。而营地教育提供国际学校、美式营地、主题营地等拓展教育。

该方向课程定价主要在数千元至万元级别不等,面向用户主要是青少年儿童。具体的营地教育拓展项目,例如2023年寒假“探究华中屋脊密码”“北京城里看中国”“探秘雪国秘境”等等,定价在8980元~13980元不等,相较而言定价远高于素质素养线上课程。

转型素质教育,教培头部公司进展如何 ?

2

好未来

2022年8月,好未来公司公布其最新战略,以科教、科创、科普为战略方向,其中“科教”战略即素质教育产品,包括学而思素养、学而思网校等品牌业务。

根据最新官方信息,学而思素养提供创新思维、人文创作、科学实验、编程等课程服务。

转型素质教育,教培头部公司进展如何 ?

该类课程定价通常在数百元到数千元之间,例如人文创作类素养课程定价在360元到4000元以上不等,而科学实验类课程定价在120元到1800元不等。

转型素质教育,教培头部公司进展如何 ?

另一个素质教育品牌学而思网校,自2021年12月好未来停止学科类校外培训后,转型至专注于素质教育。

当前学而思网校主要提供两大教育体系,1)素养课程体系,提供能力培养系统课,涵盖科学、人文、编程三个核心领域教育;2)素养生活体系提供兴趣发展轻服务,内容涵盖品德类、文化类、体育类、艺术类、科技类等。

更具体的课程服务包括:人文创作、科学思维、编程与机器人、演讲与口才、国际象棋等学习产品,定价从数十元的录播课程到千元级别的直播课之间。

此外,好未来新战略中的“科创”,主打图书出版的智能数字内容业务。Edu指南了解到,当前好未来的数字出版内容涵盖知识素养、启蒙等图书品种,例如与迪士尼、海底小纵队等国际IP合作,研发加版权引进内容,为青少年用户提供素质类知识内容服务。

根据好未来最新财报会信息(2023财年Q2,截至2022年8月),该公司营收为2.9亿美元,其中学习服务(包括学而思网校、学而思素养等素质教育业务)及其他业务是主要营收来源,占比达75%,即贡献营收2.2亿美元。

好未来公司于2021年12月末停止其原有核心业务(k12学科培训,当时该业务营收占比在90%以上),而最新财季素质教育等学习服务贡献营收占比最高,这意味着好未来公司2022年已从原核心业务转型至非学科等学习服务。

3

网易有道

 

 

有道当前提供素质教育的品牌包括“有道精品课”。该品牌此前曾用于K12学科等培训业务,当前专注于素质素养类教育。今年2月有道公司发布消息称,为了更好区分经营主体,以及学科类和非学科类校外培训,原有的“有道精品课学科”公众号和APP均更名为“志道优学”,将专注于中小学学科类培训。而“有道精品课”,将专注青少年的素质培养,不再提供学科类培训内容。

根据官网最新信息,有道精品课支持围棋、国际象棋、脑力、编程、科学、音乐等学习服务。产品类型包括至十元以下的体验课,以及千元级别的正价课。

例如在线少儿国际象棋体验课,定价为3元,而人文互动课程“四方采风·寒露班”定价为2999元。千元级别课程通常采用直播真人上课方式。

转型素质教育,教培头部公司进展如何 ?

除素质直播真人课程服务,Edu指南了解到,该公司针对素质教育,还推出了素质数字内容平台,“有道卡搭”。该平台提供录播动画的学习课程,涵盖国际围棋、少儿围棋、少儿写字、少儿编程、少儿美术等。该平台采用会员方式订阅付费,季度及年度订阅费用在198-698元之间。

转型素质教育,教培头部公司进展如何 ?

此外2022年4月,有道公司推出“有道乐读”,该品牌提供儿童线上图书阅读服务,支持绘本、故事、童话、拼音书、儿歌等多种图书阅读服务。该平台当前同样采用会员订阅付费方式运营。从最新的官方信息中,Edu指南了解到,有道乐读还推出了儿童阅读器,或是其从数字内容付费到数字硬件付费的延展探索。

 

根据有道公司最新财报进展,其2022财年Q3包括素质教育等学习服务,营收贡献8.9亿元,占该财季营收比例达63%。且同比2021财年同期该项业务营收增长37%。无论从总体占比还是增长幅度来看,包含素质教育在内的学习服务已成为有道公司2022财年以来重要的营收来源。

 

 

4

高途 

 

 

高途公司截至2022年,提供的素质教育服务,涵盖棋艺、编程、科学、脑力、阅读、思维等细分方向。

其课程产品主要分为免费的体验课、数百元至千元级别的正价课。例如全脑思维开发学习提供4节免费课程学习。而“4000词汇闪电慧记系统班”定价为1860元。

转型素质教育,教培头部公司进展如何 ?

根据高途2022年初财报季(2022财年Q1),该公司STEAM教育服务“取得了长足的进步,尤其是在编程辅导业务方面。未来将逐步发展新业务,继续在各个类别中扩展产品组合。”

而近两季度财报中,尽管高途公司没有单独指出STEAM等素质教育业务的营收进展。但在财报会中,该公司官方表示2022财年Q3,素养培训等非学科类业务以及其他业务,贡献季度营收达60%。这意味着包括素养等非学科类业务以及其他业务方向,成为高途公司最重要的收入板块。

 

 

5

掌门智能

 

 

掌门智能公司于去年推出口才、美术、编程三大素质教育课程。根据当前的产品模式,例如口才课程,采用1对1定制化直播授课。可以看到在素质教育业务新产品上,该公司延续了此前学科类教育相对个性化的服务方式。这也意味着企业在供给端需要投入更重成本的师资等资源,而学生用户端需要付出相对更高的价格。

转型素质教育,教培头部公司进展如何 ?

此外,Edu指南了解到,截至2022年掌门旗下的素质教育服务业务,还包括“掌门少儿”“掌门陪练”。根据官方介绍,掌门少儿提供国学素养、逻辑思维等少儿课程。而掌门陪练,提供钢琴陪练,支持启蒙级到高级各水平阶段陪练服务。 鉴于该公司于今年6月退市,暂时没有更多素质教育业务进展数据公布。

6

猿辅导

猿辅导截至2022年,旗下素质教育品牌包括南瓜科学、斑马、猿编程等。

南瓜科学于2021年推出,至今该品牌产品包括STEAM科学盒、科学益智玩具。根据官方最新信息,STEAM科学盒子,用于帮助用户培养STEAM跨学科能力,通过实验硬件等配套,进行探究学习。而科学益智玩具,基于多元主题,为用户提供趣味科普体验。

转型素质教育,教培头部公司进展如何 ?

斑马当前的定位是少儿数字内容平台,通过趣味动画互动内容,帮助孩子认识和探索世界。该品牌除互动内容,还有专业班主任同步辅导跟踪学习情况等。

猿编程为青少年提供编程学习课程服务,当前课程模式以直播课等为主。

2022年6月,猿辅导旗下新品牌飞象星球,发布了五款智能教育科技产品,其中包括飞象双师素质课堂。飞象双师素质课堂是进校的素质教育产品,为学校提供围棋、建筑、书法、魔方、机械等素质课程服务。

最新的进展中,2022年12月,猿辅导推出了人文博雅系列课程。该系列课程涵盖文学类阅读、信息类图书阅读书目,从阅读素养切入,为家庭孩子养成阅读习惯、学习阅读方法等提供指导。

7

作业帮

 

 

作业帮公司于去年推出素养课程产品,包括小鹿编程、小鹿写字、小鹿学习力等。

2022年1月,该公司推出“小鹿写字笔”,面向1-3年级儿童,包含专业写字练习内容、书写习惯导学以及提升文学素养的小鹿课堂。同年4月,旗下小鹿编程根据孩子年龄进行科学的分级教育,结合STEAM教育理念,提供趣味直播课堂。

转型素质教育,教培头部公司进展如何 ?

当前该公司旗下小鹿写字App,应用内提供的付费产品包括写字课程,定价在千元不等。例如“小鹿写字·启蒙系统课”,课程以视频内容为主,定价为3280元。

8

字节跳动教育

字节跳动旗下独立教育品牌大力教育,当前服务定位转型至“核心素养培养提升”。但相较而言,2022年以来,大力教育旗下并没有推出与以上教培公司相似的素质素养新课程服务。

此前提供少儿素质启蒙的子品牌瓜瓜龙,曾为用户提供人文/英语分级阅读、思维益智套装、智能写字套装产品服务,但当前其App应用已经停止用户下载,且显示近3个月没有更新。

不仅是该子品牌,字节跳动2022年推出青少年兴趣知识App“好奇小知” ,其原设定产品内容,包括支持知识科普、知识问答等。上半年该产品还上线宇宙探秘、国学经典、世界动物、艺术兴趣、科学科普、体育运动、植物科普、历史文化等等专题知识视频。

但根据最新的应用交互情况,Edu指南了解到该App产品已经停止服务。从以上的产品进展来看,截至2022年,字节跳动旗下与素质素养类教育相关的多项业务,或均处于关闭或停服状态。

转型素质教育,教培头部公司进展如何 ?

9

最后

2022年以来,尽管部分赛道参与者在素质教育业务上表现为相对停滞,但同时多家头部公司,例如新东方、好未来、有道、高途等,其最新经营进展与营收显示,素质教育已经成为它们重要的收入来源。甚至其中一些公司最核心的业务,在这一年已经基本转移至素质教育相关产品服务。一级市场的头部公司,尽管没有披露营收等数据进展,它们在2022年陆续推出或加大投入到旗下素质教育子品牌,也呈现了该方向业务对各自公司的重要程度。

而各家公司落地素质教育服务的一年中,它们围绕人文、科学等多个细分领域的课程产品,真人直播与录播课程形式,以及更广泛的动画等数字化学习内容,多元的付费模式与定位,逐渐形成了各自越来越清晰的产品模式,并为该方向业务将来进一步发展奠定新基础。

– END –

转自:

通胀可能要来了。。

这两天有个小伙伴发给我个消息说,多个国际美妆品牌,打算要在1月底涨价了。

通胀可能要来了。。

其实不光是美妆品牌,过了个年可能很多人都感受到了,通胀和涨价已经悄悄到来了。

原因也很简单,在21年逆周期紧缩了一年之后,22年整年都是处在宽松状态。

如果我们看数据的话,可以看到2022年一整年,平均每个月的M2增速都在10%以上。

甚至有不少月份达到了12%,创下了5年新高。整个M2总量,也增加了22万亿人民币,创下历史纪录。

这个货币供应的增速不能说不快了,但是很多人可能都会对一件事很奇怪。

为啥在整个22年印了这么多钞票,我们都没有感受到什么宽松带来的通胀。

这是因为整个22年的疫情防控都非常严格,物流人流和钱流都很难流动的起来。

所以虽然货币放出来了,宽松的规模也不算小,但是我们并没有在这一年感受到通胀。

甚至有不少奢侈品的价格还出现了下跌,比如说劳力士或者阿尔法这种以前要加价才能买到的商品,价格都在去年出现了不同程度的下跌。

如果用大家熟悉的费雪公式MV=PT解释的话,道理也并不是非常的复杂。

我们知道M是货币供应量,V是货币流通速度,P是商品价格,T是商品和服务的供应总量。

在货币供应量M持续上涨的情况下,货币流通速度V因为疫情影响带来的人流钱流和物流停滞,出现了持续下滑。

因为在疫情影响之下,很多人没办法外出消费,以及部分人收入下降也不敢随便消费。

这就导致了大量的钱停滞在银行体系里面,无法进入实体经济,也就无法拉动消费和投资。

甚至可能在某个阶段,可能货币流通速度V下滑的速度,比货币供应量M上升还要快。

这时候我们会看到,公式左边的MV乘积没有发生变化,甚至出现了小幅的下滑。

那么公式右边的PT里面,商品和服务的供应总量P在短期内,并不会发生什么变化。

因为正常情况下,只有在上游的这些企业挺了一段时间觉得自己扭亏无望,才会考虑关门停业。

在它们大规模发生关门停业之前,商品和服务的供应总量P是不会发生变化的,能发生变化的只有价格T。

所以这个阶段我们会看到,过去很多价格坚挺的商品,价格都出现了下滑。

现在疫情封控对钱流、人流和物流的影响已经基本结束。这意味着后续伴随着经济恢复,货币流通速度V会起来。

为了刺激经济恢复,今年甚至有很大概率货币供应量依然会保持高位,我们的预计是M2增速依然不会低于10%。

公式左边的M和V在今年都会起来,意味着MV乘积伴随着经济复苏也会变大。

公式右边的PT两个数值,T代表的商品和服务供应总量到去年底已经开始缩减了。

因为很多中小企业甚至从事服务业的个体户,都倒在了即将见到曙光的2022年。

这里面尤其是服务业的缩减是比较厉害的,这意味着供给的下滑是很厉害的。

在公式左边MV伴随着经济复苏乘积开始变大,公式右边T出现缩减的情况下,公式两边想要平衡只能是价格P出现上涨了。

伴随着2023年经济开始缓慢复苏,钱流、物流和人流周转开始加快,我们会很明显的看到各行各业,尤其是服务业出现价格上涨。

可能不少人对这轮宽松的规模有多大没啥概念,我们看看数字就可以有个大概印象。

在过去的2022年8月到11月,央行的资产负债表规模扩张了8.4%,这是一个非常庞大的数字。

通胀可能要来了。。

要知道上次央行的资产负债表扩张超过8.4%,还要追溯到2008年。

这个数字体现在央行的资产端,就是对其他公司的债权增加了1.13万亿。

到了2022年12月,我们更是看到央行扩表1.5万亿,这里面只有大约1000亿是来自外汇占款增加。

通胀可能要来了。。

剩下的1.4万亿是来自央行对商业银行的债权,这里面主要是年底央行的逆回购,向银行体系注入流动性。

虽然说每年到了年底,央行都会向商业银行体系注入流动性,但规模这么大并不常见。

上一次月度央行出现这么大规模的扩表,还是在2018年的12月,这个月扩表1.3万亿人民币。

我们这里可以看到的是:之前怎么逆周期调控紧缩,后续就会怎么放出来刺激经济,甚至规模还会更大。

因为在布雷顿森林体系解体之后,整个世界正式进入债务和信用驱动的时代。

在债务和信用驱动经济的时代,印钞放水支撑经济前行已经成为经济运行的底层规律。

短期内确实是可以搞逆周期调控,但是拉长时间看,后续的宽松规模只会大不会小。

我们之前写过篇《债务经济学》,已经在里面详细阐述过相关的原理,这里就不再赘述了。

所以虽然在过去一年伴随着M2大幅增长,大家没有感受到价格出现什么上涨。

但是伴随着今年货币供应的继续增长,和经济的恢复带来货币流通速度的恢复。

大家应该会明显的感觉到,生活里不管是衣食住行的价格都会出现上涨。

甚至可能不光是衣食住行的价格出现上涨,过去一年多时间印出来的这些钱在流通速度加快以后,不管进入哪个领域你都会看到相关领域价格出现上涨。

比如一线强二线核心地段的房产,农副产品的姜你军蒜你狠,甚至资本市场的某些板块都是类似的逻辑。

出现这种现象,其实都是每个阶段持续货币宽松以后,短期供给可能又出现收缩,随之价格又出现水涨船高这个最浅显的道理。

转自:https://mp.weixin.qq.com/s/IVkLoEPNGtW_vUaMLqrBkQ

新城吾悦广场分省份租金收入一览

0
截至2022年12月31日,已开业吾悦广场140个,其中自持126个,管理输出14个。

省份/商场数量/总租金/平均

新城吾悦广场分省份租金收入一览

湖南 4座 总租金2.99亿元 平均7475万元/座;
广西 5座 总租金2.43亿元 平均4860万元/座;
云南 5座 总租金2.66亿元 平均5320万元/座;
湖北 6座 总租金3.05亿元 平均5083万元/座;
江西 4座 总租金2.21亿元 平均5525万元/座;

新城吾悦广场分省份租金收入一览

上海 2座 总租金1.38亿元 平均6900万元/座;
贵州 2座 总租金0.97亿元 平均4850万元/座;
青海 1座 总租金0.73亿元;
内蒙古 3座 总租金0.88亿元 平均2933万元/座;
福建 1座 总租金0.53亿元;

辽宁 2座 总租金1.31亿元 平均6550万元/座;
河南 2座 总租金0.86亿元 平均4300万元/座;
宁夏 1座 总租金0.82亿元;
重庆 3座 总租金0.88亿元 平均2933万元/座;
广东 1座 总租金0.61亿元;
山西 1座 总租金0.18亿元;
甘肃 1座 总租金0.07亿元;

以上租金收入合计93.42亿元,平均6626万元/座(注:租金收入包含租金、管理费、停车场、多种经营及其他零星管理费收入)

转自:https://mp.weixin.qq.com/s/cjP_EN4moAjuYn8n6d3xwA