云中小站
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  • 友链
  • 旧博客
  •   
  •   

源码分析Python的栈帧对象的构造和VM执行字节码的原理

一、 什么是堆栈? 栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。—–百度百科 栈帧对象其中所使用的数据结构是我们常见的栈,栈是一种受限的线性表,具备后进先出的特性。栈这个数据结构具有记忆效果,常见的使用场景比如浏览器的前进和后退。在几乎所有语言中,栈帧都是实现函数调用功能的标配,栈帧中可以保存某一函数运行过程中的上下文信息,即过程活动记录。今天,通过阅读源码一起探究,在P

2022-01-04
C Python 源码分析 数据结构
Python 源码分析 数据结构 C

源码分析CPython中的垃圾回收机制

一、背景之前有幸拜读过《Python源码解析》专栏,学习了CPython的内存管理及GC,对CPython 垃圾回收相关算法有了一定了解。现在尝试去阅读CPython 的GC模块的底层源码,去学习下各个算法的原理和实现逻辑。本文旨在探究原理而仅非GC的概念。 二、CPython中三种垃圾回收机制算法1.引用计数 2.标记-清除 3.分代回收 注:引用计数是实时清理的,标记-清除和分代回收是结合使用

2021-12-22
GC Python 源码分析
Python 源码分析 GC

源码分析Python的List的列表容器

一 、背景列表list是Python开发中常用的数据结构之一,同样,其他语言中也有类似的数据结构,例如C++中的vector,Golang中的list, Java中的ArrayList等。list在Python底层是基于动态数组,给个通俗的名字—指针数组实现的,但实现的方式在每个语言中可能不完全相同。接下来,就来探究下list底层的数据结构,来学习一下Python的list相关操作集,动态扩容机制

2021-12-13
C Python 源码分析 数据结构
Python 源码分析 数据结构 C

多进程通信之基于mmap的共享内存和文件锁

一、 背景在公司项目开发中存在多机器人并行运行的场景,每个机器人都是一个进程, 每个进程都是无亲缘关系的。每个机器人根据指令的不同都可能会在运行过程中下去访问临界资源。众所周知,临界资源是指一次仅能使一个进程访问的资源,而访问临界资源对应的那段代码端即临界区,就必须互斥访问,因此加锁成了处理并发、并行的常用手段。要实现无亲缘的多进程之间的通信,就需要借助于中间件的锁,我一开始想到两种方法,一种是基

2021-12-08
操作系统 锁 多进程
操作系统 锁 多进程

Python性能调优方法

一 、背景在开发中,执行某程序时遇见一种现象,随着时间执行越久,执行某个方法的时间在不断变长。为了有效定位是哪个方法,特此去学习了下Python性能分析的方法。 二 、cProfile模块cProfile是Python的默认的性能分析器,主要用于测量CPU的耗时,不关注内存的消耗。通过cProfile可以分析每一个函数的执行时间和执行次数,进而对函数进行时间上的优化。话不多说,先上代码,如下是基于

2021-11-16
Python 性能调优
Python 性能调优

Python中获取函数的参数信息

有一个需求是构造简易的函数库的函数文档,供前端读取json文件显示到看板上。 Python中获取函数参数的参数都是从函数的__code__代码对象中获取到,因此可以使用以下方式: 使用inspect检查模块。 12345678def func(name, age, sex='male', *args, **kwargs): passimport inspectres =

2021-11-15
Python
Python

源码分析Python的Dict关联式容器

一 、 背景字典dict是Python开发中常用的数据结构之一,同样,其他语言中也有类似的数据结构,例如C++中的map,Golang中的map, Java中的HashMap等。dict是基于哈希表实现的,但实现的方式在每个语言中都不完全相同。接下来,就来探究下dict底层的数据结构,来学习一下Python的dict相关操作集,动态扩容机制以及如何在内存的使用上进行优化的。本篇文章所使用的的Pyt

2021-11-02
C Python 源码分析 数据结构
Python 源码分析 数据结构 C

selenium接管chrome,并增加自定义的参数

一 、 背景在使用selenium模拟人的操作时候,程序会启动一个进程,会调用一系列的Webdriver 库、API和各个常见的浏览器驱动进程进行交互通信,浏览器驱动进程处理命令,执行相应的操作或返回结果。 但是,有些网站是可以识别出通过Webdriver启动的浏览器。js通过执行window.webdriver.navigator可以判断当前的浏览器是否使用的是webdriver。如果是的,会返

2021-11-01
Selenium Python
Python Selenium

解决js动态刷新,导致dom树重新渲染,旧dom树上的ele过期的问题

一 、 问题在项目中使用selenium驱动js执行点击事件时,产生如下错误: selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document 通过字面意思,我们可以知道元素不再附属于页面。官方文档中关于这个异常给了两个常见的原因。 1231

2021-10-25
Selenium Python
Python Selenium

源码分析Python的deque双端队列

一、 背景我们都知道Python内置的列表list, 它可以模拟栈的操作,可以在O(1)的时间复杂度内在尾部增加和删除元素,它底层实现了动态扩容机制。但是在项目中,设计到BFS相关算法时,使用list, 从头部弹出元素, 将会导致后续的元素依次向前移动,时间复杂度变为O(N),性能变得很差。 Python标准库提供了deque模块—-双端队列,实现在头部删除和插入元素的时间复杂度为O(1),在尾部

2021-10-25
C Python 源码分析 数据结构
Python 源码分析 数据结构 C
1234…20

搜索

司云中

Hexo Fluid GitHub
总访问量 次 总访客数 人
苏ICP备20018683 苏ICP备20018683