python 系统架构_Python之优化系统架构的方案

方案3: 改变系统架构

在开始多进程之前,先简单说明一下python GIL, 之前自己对他也有些误解。因为python GIL的机制存在,同时运行的线程只有一个,但这个线程在不同时刻可以运行在不同的核上,这个调度是由操作系统完成的,如果你写个死循环,开的线程足够多,是可以把整个系统的CPU消耗干净的,此时你在Linux下通过top可以看到,us 占用的CPU不大,但sy占用的CPU会很大,CPU主要消耗在系统调度上了。下面是测试代码,大家可以试试。

import threading

class MultipleThread(threading.Thread):

def __init__(self):

threading.Thread.__init__(self)

def run(self):

while 1:

print "here"

for i in xrange(100):

multiple_thread=MultipleThread()

multiple_thread.start()

multiple_thread.join()

既然因为GIL的存在,同时只能运行一个线程,那多线程可以提高效率,当然可以!开个3-4个线程可以明显的提高性能,大概能提高个2-3倍左右吧,但继续增加线程就是副作用了。

系统多线程的系统架构:

发送和接受都不存在瓶颈,主要瓶颈在在红线部分,decode和 encode部分。多线程改成多进程比较简单,工作量不大,只要把需要多进程共享的信息,由Queue改成multiprocessing.Queue()就可以了,把继承的DiameterMsgParser(threading.Thread)改成DiameterMsgParser(multiprocessing.Process),有个比较麻烦的是log的输出,python自带的logging模块在多进程下写同一个文件会引起混乱。这个在后面单独说明。

import multiprocessing

import logging

class Worker(multiprocessing.Process):

def __init__(self,mp_name,input_queue):

multiprocessing.Process.__init__(self,name=mp_name)

self.input_queue=input_queue

def run(self):

for i in xrange(100):

self.input_queue.put_nowait(i)

logging.debug("test "+str(i))

多线程改成多进程后,在sunfire 4170 (16 core , 2.4G ) 上能支持到5000 meesages (双向), CPU占有率 30-40%,用的是标准的python2.7,因为在solaris上没安装成功pypy,所以在此机器上,我没有测试pypy对性能影响多大。但我在一个2核的linux机器上测试python和 pypy,在多进程的情况下的效率,pypy对效率的提升没有达到倍数的级别,没找到什么原因, 后面有CPU核数比较多的机器再测试下。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言之Python!

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

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

相关文章

JVM垃圾收集器——G1

导航引言一、G1 介绍1.1 适用场景1.2 设计初衷1.3 关注焦点1.4 工作模式1.5 堆的逻辑结构1.6 主要收集目标1.7 停顿预测模型1.8 拷贝和压缩1.9 与 CMS 和 Parallel 收集器的比较1.10 固定停顿目标二、堆的逻辑分区2.1 region2.2 CSet2.3 RSet2.4 Card Table三、G1 的工作原理3.…

的mvc_简述PHP网站开发的MVC模式

为了提高开发时候的代码重用和开发速度,php使用了mvc的模式,主要是对代码的功能进行了分类,M:model主要是对数据库进行操作,v:view主要是前端html文件操作,c:controller主要是编写基…

CAP 原则与 BASE 理论

导航引言一、CAP 原则1.1 Consistency 一致性1.2 Available 可用性1.3 Partition tolerance 分区容错性1.4 CAP 的矛盾1.5 CAP 的组合场景二、BASE 理论2.1 基本可用2.2 软状态2.3 最终一致性2.3.1 因果一致性2.3.2 读自身所写2.3.3 会话一致性2.3.4 单调读一致性2.3.5 单调写一…

java 教室借用管理系统_[内附完整源码和文档] 基于JAVA语言的学生选课信息管理系统...

摘 要本系统运用Java面向对象的方法设计而成。近年来,学生选课系统越来越在高校学生群体中得到普及,其所承担的功能也变得越来越丰富,所起到的作用也变得越来越重要,在被学校学生重视的同时,也意味着它的功能要更加完善…

jMeter 模拟 web 高并发请求

导航一、jmeter 简介与下载二、接口压测设置三、实战演示一、jmeter 简介与下载 Apache JMeter是Apache组织开发的基于Java的压力测试工具。 最初被设计用于Web应用测试,但后来扩展到其他测试领域。JMeter 可以用于对服务器、网络或对象模拟巨大的负载&#xff0c…

实施文档_建设工程监理全套资料范本,Word文档附百份案例表格,超实用

建设工程监理全套资料范本,Word文档附百份案例表格,超实用在日常工作中,监理人员不仅需要经常跑腿儿检查,同时还需要提交许许多多的资料存档,甚至可能需要熬夜码字。今天整理的监理资料范本,既能让监理人员…

微服务架构 —— 服务雪崩与容错方案

导航一、什么是服务雪崩二、雪崩效应的三个核心原因三、容错四、业界常见容错思路五、常见容错组件一、什么是服务雪崩 服务雪崩 指的是微服务架构中,微服务各节点之间由于网络通信异常或微服务自身故障等问题,导致请求堆积、任务堆积,消耗和…

手游方舟怎么输入代码_明日方舟再次登顶失败,为了不发十连奖励,鹰角实力控分?...

在明日方舟新版本活动“孤岛风云”正式上线后,关于干员的强度和游戏剧情的讨论也在最近多了起来。尤其是在一周年卫星干员山落地,并且人气干员塞雷娅背后的故事揭晓之后,明日方舟的热度也在玩家圈子中迅速的攀升,成为近期话题量十…

ios 图片逆时针旋转_iphone-IOS 竖直拍照被旋转,image-orientation 让图片自动旋转

本文目录结构IOS 垂直拍照的时候会遇到,PC 端读取的时候,逆时针旋转了 90 度的问题;安卓、PS 处理的,相册选择截图等不会出现这个问题;场景说明:这个图片在浏览器里,如果您单独打开的时候&#…

Spring Cloud Alibaba —— Sentinel 入门

导航一、什么是Sentinel1.1 Sentinel 的优点二、整合 Sentinel 演示三、Sentinel控制台与微服务通信的原理四、Sentinel 流控演示一、什么是Sentinel Sentinel 是阿里开源的用于提供微服务架构容错方案的组件。它以流量作为切入点,从流量控制、熔断降级、系统负载保…

websocket 获取连接id_websocket建立连接时能传递参数吗

展开全部您可以这样!在js传参的时候参数就和其他地址一样传就行 比如var wsUrl ws://localhost:8080/ScadaWebSocket/ScadaSocket/我的参数webSocketnew WebSocket(wsUrl);后台的类上面的注解这样写ServerEndpoint(value "/ScadaSocket/{param}")注意上面的花3231…

Spring Cloud Alibaba —— Sentinel 详细使用

导航引言一、Sentinel的两个基本概念二、流控规则2.1 基本选项2.2 高级选项三、熔断(降级)规则四、热点规则五、授权规则(了解)六、系统规则(了解)七、自定义异常返回八、SentinelResource九、Sentinel 规则持久化(待补…

扫地机器人单扫和双扫_小米扫拖机器人体验:再见了,拖把君

小米在2016年首次推出了扫地机器人,凭借产品力和性价比,可以说为中国家庭的智能清洁概念普及,立下一功。不过,近两年因为一直没有推出扫拖一体产品,急得民间高手都开始自己动手给米家扫地机改造拖地功能了,…

Spring Cloud —— Gateway 服务网关

导航一、什么是服务网关二、业界常见网关组件三、Spring Cloud Gateway四、Gateway 快速入门4.1 创建 gateway 服务4.2 添加 gateway 依赖和 nacos 依赖4.3 配置路由信息4.4 测试路由转发五、Gateway 执行流程六、Gateway 断言6.1 内置路由断言工厂6.2 自定义路由断言工厂七、G…

图形显卡_选核芯显卡还是独立显卡?这才是决定笔记本电脑性能的关键

买笔记本电脑的时候,选核芯显卡还是独立显卡是很多朋友纠结的问题。核芯显卡是建立在和处理器同一内核芯片上的图形处理单元,而独立显卡拥有单独的图形核心和独立的显存。那么具体哪个更好呢?这里就来介绍一下。两者各自的特点核芯显卡和传统…

Spring Cloud —— 链路追踪技术

导航一、什么是链路追踪二、Spring Cloud Sleuth2.1 相关概念三、Sleuth 入门案例四、Zipkin 的集成4.1 Zipkin 介绍4.2 Zipkin 服务端安装4.3 Zipkin 客户端安装五、Zipkin 数据持久化5.1 MySQL 数据持久化5.2 Elasticsearch 数据持久化一、什么是链路追踪 在大型系统的微服务…

使用vim的重不重要_VIM高级操作,经常用vim的应该多学习。多开发效率很有大帮助!...

Vim是号称“编辑器之神”的文本编辑软件,自从接触Vim以来,基本上都是用Vim来修改和编写代码和配置文件的。但是我一直只会用最基本的命令,虽然把HJKL的定位键已操纵地很熟练。但是Vim其他强大的地方却几乎没有触及过。学一样东西,…

bool类型数组转换成一个整数_「PHP」常用的数组键值操作函数,面试重点

数组键值操作函数1、array_values ( array $array ) : array返回数组中所有的值的数组$a[name>jikeshiguangji,age>26];print_r(array_values($a));运行结果:$aarray("name">"jikeshiguangji","age">"26");pri…

Spring Cloud —— 消息队列与 RocketMQ

导航一、什么是 MQ二、常见的 MQ 产品三、RocketMQ 概念与架构设计3.1 基本概念1、消息模型(Message Model)2、生产者与消费者(Producer & Consumer)3、主题(Topic)4、代理服务器与名称服务&#xff08…

python 读取pdf中的文本

摘要 常常需要针对pdf进行文本分析,以下给出了两种方法用来读取pdf中的文字 方法一 pypdf2 pip install pypdf2 import PyPDF2 filename xxx.pdfwith open(filename, rb) as file:# 创建一个PDF阅读器对象reader PyPDF2.PdfReader(file)# 遍历PDF中的每一页for…