Asyncio处理网络IO的练习 一、 使用Asyncio处理多协程的网络I/O, 请求获取商品信息数据123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 2022-01-10 Asyncio Python Asyncio Python
源码分析Python的GIL解释器锁的构造与实现 一、 背景之前写过一篇笔记,从理论上学了了GIL解释器锁,文章地址:深入探究GIL的利与弊。当时使用的Python版本比较旧,可能与当前文章中部分源码说明有出入。 今天通过深挖源码,学习下Python底层是如何实现GIL解释器锁,分析下GIL 解释器锁的构造与应用, 探寻为什么这把GIL锁锁的是字节码。本篇笔记使用的Python版本为3.11.0 alpha 0。 二、GIL锁的构造1.GI 2022-01-04 C Python 源码分析 数据结构 Python 源码分析 数据结构 C
源码分析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