python
文章平均质量分 79
小屋子大侠
这个作者很懒,什么都没留下…
展开
-
分布式多层次限流概述
分布式限流分布式限流常见于对外提供服务的API,例如阿里云的语音服务接口等。对于这类的服务一般常见于资源消耗比较大,服务相对比较敏感,而且某些提供的限流功能要满足多层次的限流功能,比如一分钟一次,一小时十五次,一天三十次这种功能,相对于当前常见的分布式限流方案有采用zk、etcd等组件来实现的,优点就是分布式限流过程中对于使用方来说保证了高可用,也有使用redis来实现的,在redis的实现方案中如果需要保证高可用可考虑redis的哨兵功能来实现(如果集群模式下要保持访问的客户端的时钟一致),本文就基于r原创 2020-11-20 13:38:52 · 322 阅读 · 0 评论 -
热重启概述
热重启热重启背景是在高访问量搞并发的网站中,对于服务的升级重启,会造成对正在通信的客户端的影响,从而影响了正在通信的客户端的访问,为了解决这个问题就提出了一种优雅、零宕机的解决方案即热重启。热重启的主要步骤如下;监听优雅升级或热重启的信号。收到信号后fork子进程,子进程加载新的执行进程,父进程将当前监听的socket文件描述符传递个子进程(此时就需要将close_on_exec标志位清除掉)。子进程重新通过文件描述符生成sock并监听该socket,此时相当于有两个进程同时监听了一个文件描述符,原创 2020-09-21 15:17:10 · 1534 阅读 · 0 评论 -
遍历百万级Redis的键值的大结局
背景上次改完利用条件变量的形式来进行rdbtool和socket接受的数据联合分析,我再想能不能通过协程来实现避免条件变量这种调用系统调用的方式,当然如果算一下因为每一次接受的socket的数据都尽量的大的话其他调用条件变量的次数或许在整个性能消耗里面占比比较小的,这个方式只是想自己探索一下。协程的改造之路greenlet的基本使用from greenlet import greenletdef test1(): print(12) gr2.switch() print(原创 2020-06-23 17:45:00 · 482 阅读 · 0 评论 -
遍历百万级Redis的键值的续集
背景在完成脚本Redis的key的遍历脚本之后,原以为事情就这么过去了,在同事试用脚本之后,拿了一个线上的集群做了测试,响应速度非常满意,觉得不错但是qps过高担心影响线上业务。于是我查看了测试环境的qps之后发现遍历五百万key的时候,qps会非常高。redis-cli -p 6379 -r 100 -i 1 info|grep opsinstantaneous_ops_per_sec:104245instantaneous_ops_per_sec:106227instantaneous_ops原创 2020-06-18 19:40:39 · 473 阅读 · 0 评论 -
遍历百万级Redis的键值的曲折经历
背景暖心同学突然跟我说想要获取线上所有的Redis的key的大小信息,就是想知道redis中所有对应Key的大小信息(线上使用的redis存储的信息基本统一而且没有其他复杂的如set等数据结构),让我帮忙来解决一下这个问题。听到这个问题之后,我对着电脑深吸一口气,表面表现出嗯嗯这个问题有点复杂,我需要整理一下思绪。内心早就想着这个问题好像不难吧,抄起电脑吭哧吭哧几行代码不就搞定了嘛,哈哈哈。Redis心花路放第一版import redisimport timerip = "192.168原创 2020-05-27 16:10:42 · 2597 阅读 · 8 评论 -
Python3.5源码分析-sys模块及site模块导入
Python3源码分析本文环境python3.5.2。参考书籍<<Python源码剖析>>python官网Python3的sys模块初始化根据分析完成builtins初始化后,继续分析sys模块的初始化,继续分析_Py_InitializeEx_Private函数的执行,void_Py_InitializeEx_Private(int insta...原创 2018-08-08 11:02:45 · 1412 阅读 · 0 评论 -
Python3.5源码分析-垃圾回收机制
Python3源码分析本文环境python3.5.2。参考书籍&lt;&lt;Python源码剖析&gt;&gt;python官网Python3的垃圾回收概述随着软硬件的发展,大多数语言都已经支持了垃圾回收机制,让使用者从内存管理的工作中解放出来。Python的垃圾回收机制,采用了引用计数来管理的,应用计数也算是一种垃圾回收机制,也是一种直观简单的垃圾回收计数,引用计数方法的...原创 2018-08-13 18:42:40 · 757 阅读 · 0 评论 -
Python3.5源码分析-List概述
Python3源码分析本文环境python3.5.2。参考书籍<<Python源码剖析>>python官网Python3的List对象list对象是一个变长对象,在运行时动态调整其所维护的内存和元素,并且支持插入删除等操作,list的定义如下;#define PyObject_VAR_HEAD PyVarObject ob_base;#...原创 2018-08-18 11:28:09 · 1699 阅读 · 0 评论 -
Python3.5源码分析-Dict概述
Python3源码分析本文环境python3.5.2。参考书籍<<Python源码剖析>>python官网Python3的Dict对象在生成d = {}和d[‘1’] = ‘1’,执行的字节码如下; 23 94 BUILD_MAP 0 97 STORE_NAME ...原创 2018-08-19 09:50:35 · 862 阅读 · 0 评论 -
Django项目test中的mock概述
Django项目test中的mock概述本文环境python3.5.2test中的mock实现接口示例代码如下; ... # 路由配置 ('^api/business_application/?$', TestAPI.as_view()), ... # 接口函数 app_name.apis.pyfrom rest_framework.generics import Gene...原创 2018-11-28 09:14:43 · 3207 阅读 · 0 评论 -
Python3.5源码分析-内建模块builtins初始化
Python3源码分析本文环境python3.5.2。参考书籍&lt;&lt;Python源码剖析&gt;&gt;python官网Python3模块初始化与加载Python的模块分为内建的模块,函数与用户定义的模块,首先分析Python内建模块。Python3的系统内建模块初始化上文介绍了Python的线程对象和解释器对象,在初始化的时候,会执行_Py_Initi...原创 2018-08-08 08:57:26 · 2663 阅读 · 0 评论 -
Python3.5源码分析-内存管理
Python3源码分析本文环境python3.5.2。参考书籍<<Python源码剖析>>python官网Python3的内存管理概述python提供了对内存的垃圾收集机制,内存管理相关的函数基本位于Objects/obmalloc.c和Modules/gcmodule.c模块中,其中obmalloc.c中主要是管理Python在运行的时候所申请的内存...原创 2018-08-12 18:50:48 · 1259 阅读 · 0 评论 -
python3.5源码分析-启动与虚拟机
Python3源码分析本文环境python3.5.2。参考书籍<<Python源码剖析>>python官网Python3启动流程概述本文基于python3分析其基本的运行过程。作为一门动态语言,python脚本在运行的过程中,实现了编译文件并执行编译文件的过程,这一过程都是基于c语言实现,首先开始介绍一下python3的基本信息。Python3...原创 2018-08-05 16:39:24 · 6489 阅读 · 3 评论 -
python3.5全局解释器锁GIL-实现原理浅析
python3全局解释器锁浅谈本文环境python3.5.2。python全局解释器锁In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lo...原创 2018-07-28 10:14:35 · 1481 阅读 · 0 评论 -
Python源码学习:Python类机制分析
Python源码分析本文环境python2.5系列参考书籍<<Python源码剖析>>本文主要分析Python中类时如何实现的,在Python中,一切都是对象;任何对象都有一个type,都可以通过class属性,一般情况下为type对应于Python源码中的PyType_Type;在Python的类中,都直接或者间接与Object有关联,都是Object的子类,对应Python中PyBaseOb原创 2018-04-07 10:44:20 · 1794 阅读 · 0 评论 -
Python源码学习:Python函数浅析-函数闭包
Python源码分析本文环境python2.5系列参考书籍<<Python源码剖析>>上一篇分析了函数参数的分析后,本文分析函数闭包的实现。函数闭包即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。 我们看看函数闭包在Python中的实现。分析先查看脚本文件代码;def get_func(): v原创 2018-04-04 17:39:39 · 451 阅读 · 0 评论 -
Python源码学习:多线程实现机制
Python源码分析本文环境python2.5系列参考书籍<<Python源码剖析>>本文分析Python中的多线程机制,主要通过一个多线程的脚本来分析多线程的基本操作与实现。分析本次分析的脚本如下;import threadimport timedef f(): while True: print("test test") time.sleep(1)t原创 2018-04-11 18:15:42 · 1159 阅读 · 0 评论 -
Django项目配合sentry实现浅析
Django项目日志配合sentry概述本文环境python3.5.2,Django版本1.10.2Django项目中日志配合sentry的实现sentry是一个错误跟踪网站,可以收集获取运行中报错的相关信息。本文的实例代码参考上篇博文Django项目日志概述中的示例代码,其中部分示例代码如下;在settings.py文件中添加如下配置LOGGING = { ... '...原创 2018-12-19 14:42:42 · 2180 阅读 · 3 评论 -
Python标准库threading模块Condition原理浅析
Python标准库threading模块原理浅析本文环境python3.5.2threading模块的实现思路在Python的多线程实现过程中,在Linux平台上主要使用了pthread线程库作为Python的多线程实现方式。其中Python提供了threading.py模块,来提供有关多线程的操作,在Python的多线程实现中比较重要的就是Condition该类的实现,好多相关方法都是通...原创 2019-01-24 15:50:05 · 1206 阅读 · 1 评论 -
Python标准库asyncio模块基本原理浅析
Python标准库asyncio模块基本原理浅析本文环境python3.7.0asyncio模块的实现思路当前编程语言都开始在语言层面上,开始简化对异步程序的编程过程,其中Python中也开始了在语言层面上对异步编程的简化,特地使用了await和async这两个关键字来进行对异步代码的简化和封装。本文就开始简单的分析一下asyncio标准库是怎么来封装异步编程的这么一个过程,大致浏览一下a...原创 2019-01-22 11:40:29 · 8750 阅读 · 3 评论 -
pip包管理工具-install执行流程简单查看
pip概述pip是python提供的包管理工具,该工具提供了对python包的查找、下载、安装与卸载等功能的工具,当前是python中比较主流的管理工具。pip下载安装包的概述pip工具的本质通过网络请求去请求服务端对应名称的文件然后解压到本地的python的库文件夹中,从而达到讲远端的python包下载并安装到本地。概述流程如下:pip install django1.先获取到远端的...原创 2019-06-20 18:51:18 · 13001 阅读 · 4 评论 -
python3.7源码分析-集合(set)
python集合set是无序且不重复的集合,是可变的,通常用来从列表中删除重复项以及计算数学运算,如交集、并集、差分和对称差分等集合操作。set 支持 x in set, len(set),和 for x in set。作为一个无序的集合,set不记录元素位置或者插入点。因此,sets不支持 indexing, 或其它类序列的操作。python集合概述在set中,对应的set的值的存储是通过...原创 2019-06-04 19:38:03 · 2364 阅读 · 2 评论 -
kazoo源码分析:Zookeeper客户端start概述
kazoo源码分析kazoo-2.6.1kazoo客户端kazoo是一个由Python编写的zookeeper客户端,实现了zookeeper协议,从而提供了Python与zookeeper服务器连接的工具,有关zookeeper服务端的使用大家可自行查阅相关资料,本文主要概述一下kazoo作为一个客户端是如何实现与zookeeper进行通信,客户端的架构是如何实现的。kazoo客户端s...原创 2019-05-18 10:18:19 · 1362 阅读 · 0 评论 -
python3.7源码分析-字典
python字典Dictionary object implementation using a hash table ,通过描述可知,python的字典就是实现了一个hash表。Python字典概述在python的字典中,一个键值对的对应保存就是PyDictEntry类型来保存;typedef struct { /* Cached hash code of me_key. */...原创 2019-05-22 16:43:36 · 2102 阅读 · 3 评论 -
kazoo源码分析:服务器交互的实现细节
kazoo源码分析kazoo-2.6.1kazoo客户端与服务器概述上文start概述中,只是简单的概述了kazoo客户端初始化之后,调用了start方法,本文继续详细的了解相关的细节。kazoo启动之后的主要技术细节示例代码本文主要是分析一下基本流程与启动的架构实现,示例代码如下;from kazoo.client import KazooClientzk = KazooCl...原创 2019-05-18 23:43:03 · 1631 阅读 · 0 评论 -
代码覆盖率原理分析:sys.settrace流程分析
sys.settrace分析环境本文环境python3.5.2sys.settrace函数执行首先我们继续查看示例代码如下:import sysdef trace(frame, event, arg_unused): print(frame.f_lineno, event, arg_unused) return tracesys.settrace(trace)...原创 2019-03-13 16:21:29 · 3563 阅读 · 0 评论 -
coverage代码覆盖率测试工具:基本原理分析与使用
coverage环境描述本文环境python3.5.2coverage版本4.3.1coverage概述代码覆盖率工具主要是为了检查测试用例覆盖了多少业务处理代码,在Django项目中,通过编写的测试用例,来检查后端业务逻辑接口的逻辑覆盖程度,以达到全面测试,根据需要覆盖的重要的业务代码,从而提供测试用例的全面性,提高测试质量。coverage的基本使用首先我们先创建示例代码,代码如...原创 2019-03-12 14:02:35 · 9224 阅读 · 0 评论 -
locust压测工具:测试信息输出与分布式模式
locust压测环境描述本文环境python3.5.2locust版本0.9.0locust测试信息输出与分布式模式本文将主要分析两个方面的内容:1.locust在启动运行在跑测试用例的时候,会将相关的测试信息输出2.locust支持分布式测试,已达到可以通过多机器来达到高并发的测试。下文将会对这两个内容进行分析。locust测试时的相关测试信息在locust启动流程的分析过程...原创 2019-02-25 17:44:17 · 2364 阅读 · 0 评论 -
Python上下文语法with小述
Python上下文语法with小述本文环境python3.5.2上下文语法with该语法糖主要便于在Python的编程过程中,能够有效管理防止编程过程中,对有关资源编程时忘记释放的问题,比如通过with来open一个文件,就不需要显式的在处理完成文件之后调用f.close方法,易于简洁编写相关代码。在Python中通过contextlib提供了两种的上下文的实现方式,分别是通过继承Cont...原创 2019-02-19 17:15:11 · 648 阅读 · 0 评论 -
locust压测工具:http测试过程与定时停止
locust压测环境描述本文环境python3.5.2locust版本0.9.0locust示例的执行过程上文大概描述了locust的启动了流程,本文主要是接着上文继续分析,示例代码中的http的测试的执行过程,是如何去访问远端的http接口的流程。接着就分析如何通过传入的运行时间参数来停止locust的运行。http测试用例的执行示例代码中访问url的代码如下:@task(2)...原创 2019-02-25 11:22:10 · 3973 阅读 · 2 评论 -
locust压测工具:启动概述
locust压测工具启动概述本文环境python3.5.2locust版本0.9.0locust概述locust是一个简单易用、分布式的用户压测工具,并确定系统可以处理多少并发用户。在测试的时候,让你定义的每一个测试用例都执行,并且可以从web界面来监控所有执行的用例的执行过程。这将有助于您在让真正的用户进入之前对您的代码进行测试和识别瓶颈。locust基于事件驱动,因此可以在一台机器上...原创 2019-02-24 15:06:36 · 3524 阅读 · 0 评论 -
Python标准库queue模块原理浅析
Python标准库queue模块原理浅析本文环境python3.5.2queue模块的实现思路作为一个线程安全的队列模块,该模块提供了线程安全的一个队列,该队列底层的实现基于Python线程threading中的Condition原理来实现的队列(对该原理的讲解可参考以前博文)。本文就先概述一下queue队列的使用示例;import queueimport threadingq =...原创 2019-01-30 17:48:47 · 1647 阅读 · 0 评论 -
Python源码学习:Python函数浅析-有参函数
Python源码分析本文环境python2.5系列参考书籍<<Python源码剖析>>继续上一篇无参函数的调用后,本文将分析Python中的有参函数的大致流程,在Python中主要的参数类型有四种; 1.位置参数,如f(a,b),a和b就称为位置参数; 2.键参数,如f(a=1),其中a=1就称为键参数; 3.扩展位置参数,如f(*list),其中调用为f(1,2)时,1和2就称为扩展位置原创 2018-04-02 18:54:18 · 735 阅读 · 0 评论 -
Python源码学习:Python类机制分析-用户自定义类
Python源码分析本文环境python2.5系列参考书籍<<Python源码剖析>>上一文,分析了Python在启动初始化时,对内置类的一个基本的初始化流程,本文就简析一下用户自定义类的实现过程。分析脚本如下;class A(object): name = 'attr_a' def __init__(self): print("A.__init__") de原创 2018-04-09 15:46:30 · 602 阅读 · 0 评论 -
Python源码学习:Python函数浅析-无参函数
Python源码分析本文环境python2.5系列参考书籍<<Python源码剖析>>本文会大致分析一下Python中的函数机制。在Python中,函数是一个比较重要的类型,在实现过程中主要参考了操作系统中的函数调用过程,把每个函数模拟成一段待执行的代码,在运行过程中调用,每一段执行的PyCodeObject都被包装在frame中,等待被调用执行,然后调用虚拟机调用执行,这个过程就是一个嵌套执行原创 2018-03-31 12:55:31 · 1235 阅读 · 0 评论 -
Python设计模式-职责链模式
Python设计模式-职责链模式代码基于3.5.2,代码如下;#coding:utf-8#职责链模式class Handler(): def __init__(self): self.successor = None def setSuccseeor(self,successor): self.successor = successor de原创 2017-06-24 18:47:36 · 367 阅读 · 0 评论 -
Python设计模式-命令模式
Python设计模式-命令模式代码基于3.5.2,代码如下;#coding:utf-8#命令模式class barbecuer(): def bakeButton(self): print("烤羊肉") def chickenButton(self): print("烤鸡翅")class command(): def __init__(sel原创 2017-06-24 18:46:08 · 295 阅读 · 0 评论 -
Python设计模式-外观模式
Python设计模式-外观模式代码基于3.5.2,代码如下;#coding:utf-8# 外观模式class AlarmSensor: def run(self): print("Alarm Ring...")class WaterSprinker: def run(self): print("Spray Water ...")class Emerg原创 2017-06-24 18:38:32 · 230 阅读 · 0 评论 -
Python设计模式-观察者模式
Python设计模式-观察者模式代码基于3.5.2,代码如下;#coding:utf-8# 观察者设计模式class observerInterface(): def update(self,value): raise NotImplementedErrorclass NBAPerson(observerInterface): def __init__(self,n原创 2017-06-24 18:29:00 · 268 阅读 · 0 评论 -
Python设计模式-桥接模式
Python设计模式-桥接模式基于Python3.5.2,代码如下#coding:utf-8class Shape(): name = "" param = "" def __init__(self,*param): pass def getName(self): return self.name def getParam(se原创 2017-06-23 08:32:00 · 396 阅读 · 0 评论