![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python 64式
天地一扁舟
这个作者很懒,什么都没留下…
展开
-
python 64式: 第54式、制作pip包
目标:制作某个版本的pip的python包tag会记录版本的commit号步骤:步骤1: 给包打上版本信息git tag -a -m "Release X.Y.Z" X.Y.Z 样例:git tag -a -m "Release 0.0.1" 0.0.1 解释:git tag -a -m-a参数来创建一个带备注的tag,备注信息由-m指定。如果你未传入-m则创...原创 2020-04-27 17:57:21 · 344 阅读 · 0 评论 -
python 64式: 第53式、迭代器
#!/usr/bin/env python# -*- coding: utf-8 -*-'''关键:1 迭代器1)迭代器是包含__next__方法的任何对象2)可迭代对象是任何定义了__iter__方法的对象,__iter__返回迭代器(实现__next__方法)3) 迭代器样例代码如下class Fibonacci(object): def __init__(self...原创 2020-01-04 16:09:02 · 156 阅读 · 0 评论 -
python 64式: 第52式、单元测试
待补充原创 2020-01-02 11:49:58 · 103 阅读 · 0 评论 -
python 64式: 第51式、实现一个线程安全的队列
待补充原创 2020-01-01 20:32:00 · 117 阅读 · 0 评论 -
python 64式: 第50式、queue源码分析
目标:弄清楚python队列的底层实现以及队列是否线程安全1 主入口class Queue: def __init__(self, maxsize=0): # 设置队列的最大容量 self.maxsize = maxsize self._init(maxsize) # 线程锁,互斥变量 self.mu...转载 2020-01-01 20:31:19 · 181 阅读 · 0 评论 -
python 64式: 第49式、dict源码分析
目标:弄清楚python中dict的实现原理1 dict原理1.1 原理python的字典实际是哈希表,通过哈希函数将key映射到表中的位置来存储value。存在不同对象经过哈希函数得到的哈希值可能相同,此时采用开放定址法来解决冲突。开放定址法通过二次探测函数f寻找下一个候选位置,若位置可用,则将数据插入。使用二次探测函数f从一个位置出发可以到达多个位置,这些位置形成了冲...原创 2020-01-01 20:30:20 · 202 阅读 · 0 评论 -
python 64式: 第48式、list源码分析
目标:弄清楚python list的源码以及内存分配机制1 主入口https://github.com/python/cpython/blob/master/Include/listobject.hhttps://github.com/python/cpython/blob/master/Objects/listobject.c代码如下:#ifndef Py_LIMITED_A...原创 2020-01-01 20:29:37 · 227 阅读 · 0 评论 -
python 64式: 第47式、类装饰器
目标:弄清楚类装饰器的原理与实现1 代码class StudWithParams: def __init__(self, name, age): self.name = name self.age = age def __call__(self, func): print "enter __call__" ...原创 2020-01-01 20:28:48 · 216 阅读 · 0 评论 -
python 64式: 第46式、浅拷贝源码分析
目标:深拷贝源码分析0 深浅拷贝基础关键:1 深拷贝:拷贝了对象所有元素,包含嵌套元素。是与原来对象无关的全新对象。无关性。2 浅拷贝: 创建新对象,但新对象中各个元素是原对象对应各个元素的引用。3 举例如下:a = [1,[2,3]]c = copy.copy(a)那么a与c虽然是两个不同对象(id(a) != id(c)),但是a与c中各个元素是相同的(例如id(a[0]...原创 2019-12-29 21:23:20 · 153 阅读 · 0 评论 -
python 64式: 第45式、sqlalchemy架构与多对多关系的实现
目标:1弄清楚sqlalchemy的原理2实现sqlalchemy多对多表模型1 ORM含义:对象关系映射,把对数据库中某个表的操作转换为对某个对象的操作。作用: ORM把对一个对象的操作转换成对数据库的操作2 SQLAlchemy架构架构图如下:SQLAlchemy ORM: Object Relational MapperSQLAlchemy Core: Sche...原创 2019-11-26 08:18:40 · 371 阅读 · 0 评论 -
python 64式: 第44式、协程源码分析
目标:弄清楚协程eventlet的源码以及具体如何实现并发的原理。期间包含对greenlet,epoll的介绍。内容目录如下:1 eventlet简述2 greenlet3 epoll4 源码分析5 eventlet使用6 总结1 eventlet简述1.1 eventlet基础eventlet:协程(绿色线程),一个线程内的伪并发方式。通过互相渡让cpu实现并发。原理...原创 2019-11-26 08:17:31 · 466 阅读 · 0 评论 -
python 64式: 第43式、深拷贝源码分析
目标:深拷贝源码分析0 深浅拷贝基础关键:1 深拷贝:拷贝了对象所有元素,包含嵌套元素。是与原来对象无关的全新对象。无关性。2 浅拷贝: 创建新对象,但新对象中各个元素是原对象对应各个元素的引用。3 举例如下:a = [1,[2,3]]c = copy.copy(a)那么a与c虽然是两个不同对象(id(a) != id(c)),但是a与c中各个元素是相同的(例如id(a[0]...原创 2019-11-26 08:16:35 · 218 阅读 · 0 评论 -
python 64式: 第42式、进程池源码分析
目标:弄清楚进程池的实现原理0 线程池与进程池基础关键:1、线程池提出原因:同时创建很多线程是需要消耗资源的,可以创建几个线程,其他任务在等待线程池中线程完成,就可以继续处理本质:将任务提交到线程池的任务队列中组成:等待队列和一系列线程作用: 主线程可以获取线程状态,返回值;一个线程完成,主线程可以知道2、 concurrent.futures.Executor作用:抽...原创 2019-11-26 08:15:53 · 1510 阅读 · 0 评论 -
python 64式: 第41式、线程池源码分析
目标:python线程池源码分析1 主入口这里使用我自己的一个线程池代码作为总入口import timefrom concurrent import futuresdef run(num): return time.ctime(), numdef threadPoolExecutor_submit(): with futures.ThreadPo...原创 2019-11-26 08:15:16 · 669 阅读 · 0 评论 -
python 64式: 第40式、django的url路由控制器源码与原理探究
待补充原创 2019-10-28 09:00:14 · 88 阅读 · 0 评论 -
python 64式: 第39式、pecan的根据url路由到处理方法源码与原理探究
待补充原创 2019-10-28 08:59:22 · 215 阅读 · 0 评论 -
python 64式: 第38式、tooz分布式锁源码与原理探究
tooz中分布式锁原理与源码分析1 总入口这里选择gnocchi组件class CarbonaraBasedStorage(storage.StorageDriver): def process_new_measures(self, indexer, metrics_to_process, sync=False): ...原创 2019-10-28 08:57:53 · 336 阅读 · 0 评论 -
python 64式: 第8式、生成器
#!/usr/bin/env python# -*- coding: utf-8 -*-'''关键:1 生成器: 含义: 一边生成,一边计算优点: 适用于不能一下子将输入数据存储在列表中,然后遍历输入数据列表进行处理的场景特点: 输入的数据需要有某种推导或者计算规则2 生成方式:方式1: 圆括号例如:generator = (x * x for x in range(5)...原创 2018-10-18 22:04:00 · 154 阅读 · 0 评论 -
python 64式: 第29式、分布式锁与群组管理__4、tooz之一致性哈希,群组管理源码分析
目标:通过调试分析出现有的tooz是如何实现一致性哈希和群组管理,具体到redis做为后端实现的具体细节。0 调试环境本地环境调试版本:pip list|grep tooztooz (1.57.4)社区tooz代码在:https://github.com/openstack/toozgit clone https://github.com/openstack/tooz.git...原创 2019-07-17 08:32:59 · 473 阅读 · 0 评论 -
python 64式: 第32式、多进程框架cotyledon探究与性能测试
1 编写cotyledonServer.py该文件用于在cotyledon多进程框架中监听消息队列并处理消息#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 11/28/17 3:07 PM# @Author : Aries# @Site : # @File : main.py# @Software...原创 2019-07-11 23:01:30 · 798 阅读 · 0 评论 -
python 64式: 第30式、分布式锁与群组管理__5、tooz之分布式锁源码分析
有必要深入理解分布式锁的源码,这是TODO list中的核心内容。先占个坑,后面补上。原创 2019-07-20 08:45:28 · 146 阅读 · 0 评论 -
python 64式: 第31式、基于redis的分布式锁实现
有必要自己实现基于redis分布式锁的源码,这是TODO list中的核心内容。先占个坑,后面补上。原创 2019-07-20 08:47:06 · 102 阅读 · 0 评论 -
python 64式: 第34式、threading的Event用法
# -*- encoding: utf-8 -*-from datetime import datetimeimport threadingimport timefrom oslo_utils import timeutils'''1 threading.Event作用: 用于线程间通信的变量,本质是一个类似布尔值的变量。常用方法:is_set(): 判断该变量是否为空...原创 2019-07-31 08:05:54 · 228 阅读 · 0 评论 -
python 64式: 第35式、基于cotyledon和threading.Event实现定时任务
# -*- encoding: utf-8 -*-import abcfrom datetime import datetimeimport sysimport threadingimport timeimport cotyledonfrom cotyledon import oslo_config_gluefrom oslo_config import cfgfrom o...原创 2019-07-31 08:06:05 · 273 阅读 · 0 评论 -
python 64式: 第36式、分布式锁与群组管理__6、tooz之设计架构分析
tooz整体设计架构分析引言:tooz本身聚焦了python项目中的两个痛点,一个是群组管理(也就是分布式集群的概念),另一个是分布式锁。其中群组管理,主要关注了两个方面,一个是一致性哈希(可用于负载均衡),另一个是leader选举。tooz中有许多driver做为后端来实现,例如redis,mariadb,zookeeper等。通过抽象类或者父类来定义公共的接口,而具体的Driver做...原创 2019-08-09 21:54:30 · 321 阅读 · 0 评论 -
python 64式: 第37式、eventlet并发性能探究
1 eventlet性能探究测试代码如下:# -*- encoding: utf-8 -*-from datetime import datetimeimport timeimport eventleteventlet.monkey_patch()# eventlet.monkey_patch(all=False,# os=Tru...原创 2019-09-19 09:31:11 · 346 阅读 · 0 评论 -
python 64式: 第33式、python中的缓存机制分析
1 ceilometer的缓存机制在ceilometer\dispatcher\gnocchi.py文件的GnocchiDispatcher类中使用了oslo_cache,具体代码如下: self.cache = None try: import oslo_cache oslo_cache.co...原创 2019-07-14 10:34:06 · 218 阅读 · 0 评论 -
python 64式: 第28式、分布式锁与群组管理__3、tooz应用之分布式锁
python中分布式锁与群组管理系列最近有接触到分布式锁的相关问题。基于openstack相关组件源码, tooz官网文档和自己对组件使用的一点点心得,想整理一下这部分的内容。主要想分为四个部分介绍:分布式锁与群组管理 1、 tooz介绍分布式锁与群组管理 2、 tooz应用之负载均衡分布式锁与群组管理 3、 tooz应用之分布式锁分布式锁与群组管理 4、 tooz源码分析下面...原创 2019-05-23 05:35:56 · 1440 阅读 · 0 评论 -
python 64式: 第24式、python项目国际化翻译实战
1 寻找一个项目进入一个python项目,这里我用的是之前写的项目myproject2 步骤2.1 在项目的目录下编写i18n.py文件例如我的路径是:myproject/myproject目录下面内容如下:# -*- encoding: utf-8 -*-import oslo_i18n# ref: https://docs.openstack.org/oslo.i18...原创 2019-05-17 09:05:36 · 526 阅读 · 0 评论 -
python 64式: 第12式、用stevedore写python插件
先建立项目目录: mystevedore然后新建一个目录: people,该目录下面分别包含:__init__.pychinese.pyenglish.pypluginBase.py文件__init__.py 文件内容为空pluginBase.py文件内容如下#!/usr/bin/env python# -*- coding: utf-8 -*-...原创 2018-10-30 09:18:20 · 557 阅读 · 0 评论 -
python 64式: 第11式、元类
#!/usr/bin/env python# -*- coding: utf-8 -*-'''关键:1 元类含义:创建类的东西,用来创建这些类,是类的类作用:1) 修改类,返回修改后的类 2) 对象关系映射,将定义的简单类转变成对数据库的操作目的: 当创建类时能够自动改变类,希望可以创建符合当前上下文的类类的类型是type,type可以动态创建类,可以接收类的描述符作...原创 2018-10-23 21:32:07 · 129 阅读 · 0 评论 -
python 64式: 第10式、深浅拷贝
#!/usr/bin/env python# -*- coding: utf-8 -*-import copy'''关键:1 深拷贝:拷贝了对象所有元素,包含嵌套元素。是与原来对象无关的全新对象。无关性。2 浅拷贝: 创建新对象,但新对象中各个元素是原对象对应各个元素的引用。3 举例如下:a = [1,[2,3]]c = copy.copy(a)那么a与c虽然是两个不同...原创 2018-10-22 22:00:51 · 121 阅读 · 0 评论 -
python 64式: 第9式、线程池
#!/usr/bin/env python# -*- coding: utf-8 -*-import timefrom concurrent import futures'''关键:1、线程池提出原因:同时创建很多线程是需要消耗资源的,可以创建几个线程,其他任务在等待线程池中线程完成,就可以继续处理本质:将任务提交到线程池的任务队列中组成:等待队列和一系列线程作用: 主...原创 2018-10-18 22:46:59 · 260 阅读 · 0 评论 -
python 64式: 第7式、抽象类与抽象方法
#!/usr/bin/env python# -*- coding: utf-8 -*-import abcfrom datetime import datetimeimport six'''关键:1 抽象类与抽象方法在类前面加上:@six.add_metaclass(abc.ABCMeta)class People(object)里面必须至少包含一个抽象方法,即@...原创 2018-10-17 22:38:30 · 253 阅读 · 0 评论 -
python 64式: 第6式、定时器
#!/usr/bin/env python# -*- coding: utf-8 -*-import loggingimport sysfrom datetime import datetimefrom oslo_config import cfgfrom oslo_log import logfrom oslo_service import service'''关键:...原创 2018-10-17 22:34:33 · 186 阅读 · 0 评论 -
python 64式: 第5式、装饰器
#!/usr/bin/env python# -*- coding: utf-8 -*-from datetime import datetimeimport functoolsimport time'''关键:1 装饰器含义:代码运行期间动态增加功能本质:返回函数的高阶函数,接收函数本身作为参数,返回一个包含对该函数前后处理的函数2 无参装饰器: def time...原创 2018-10-17 22:32:13 · 178 阅读 · 0 评论 -
python 64式: 第4式、eventlet协程实现并发
#!/usr/bin/env python# -*- coding: utf-8 -*-from datetime import datetimeimport eventleteventlet.monkey_patch(all=True)from eventlet.green import urllib2'''关键:1 eventlet:协程(绿色线程),一个线程内...原创 2018-10-17 22:29:52 · 991 阅读 · 0 评论 -
python 64式: 第3式、rabbitmq消息队列使用
topicProductor.py内容如下#!/usr/bin/env python# -*- coding: utf-8 -*-import pikaimport sys'''问题:实现基于rabbitmq的生产者和消费者,消费者可以支持绑定路由键为notification.*,则生产者如果绑定的路由键为notification.info,那么生产者发送的消息hello,...原创 2018-10-17 22:21:16 · 198 阅读 · 0 评论 -
python 64式: 第2式 为python项目搭建unittest框架
python项目unittest框架搭建由于ci(continuous integration持续集成)需要用来不断验证每次提交代码的正确性,因此项目的unittest检查非常重要。本文提供了一种为python项目搭建unittest框架的方法,并可以进行pep8的检查。主要思想是借鉴openstack项目的tox.ini及其相关工具。下面是为python项目搭建unittest的具体操作...原创 2018-07-25 12:29:23 · 1045 阅读 · 0 评论 -
python 64式: 第17式、死锁或进程hang住调试方法
步骤1:下载python-debuginfo如果已经发现有/etc/yum.repos.d/xxx-Debuginfo.repo,就不需要下载修改/etc/yum.repos.d/xxx-Debuginfo.repo将其中的enabled=0修改为enabled=1步骤2:下载gdbyum install gdb -y步骤3: 下载debug信息包然后执行如下命令y...原创 2018-11-10 20:39:10 · 1975 阅读 · 0 评论