背景 最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便不同模块复用大部分代码,同时强制必须实现所有抽象方法,没想按想当然的写法实现多继承时,居然报错metaclassconflict: In[1]:importabc In[2]:fromdjango.contribimportadmin In[3]:classMyAdmin(abc.ABC,admin.ModelAdmin): ...:pass ...: ---------------------------------------------------...

  IlgtJysvQrDk   2023年11月02日   34   0   0 Python

背景 最近有一个业务场景需要用Python自行实现一个简单的LRUcache,不可避免的接触到了弱引用这一概念,这里记录一下。 强引用 Python内存回收由垃圾回收器自动管理,当一个对象的引用计数归0时,其内存就可能被回收掉,而引用计数器的数值其实就是代表有多少个强引用指向该对象,我们日常写的Python代码如果没有使用到weakref模块一般都只会涉及到强引用。可以通过sys.getrefcount查看对象的引用计数,如以下代码: importsys alist=[1,2,3]alist引用计数=1 print(sys.getrefcount(alist))包括getrefcount本身...

  IlgtJysvQrDk   2023年11月02日   35   0   0 Python

背景 近期一个大版本上线后,Python编写的api主服务使用内存有较明显上升,服务重启后数小时就会触发机器的90%内存占用告警,分析后发现了本地cache不当使用导致的一个内存泄露问题,这里记录一下分析过程。 问题分析 LocalCache实现分析 该cache大概实现代码如下: classLocalCache(): notFound=object()定义cache未命中时返回的唯一对象 listdict等本身不支持弱引用,但其子类支持,这里包装下 classDict(dict): def__del__(self): pass def__init__(self,maxlen=10):max...

  IlgtJysvQrDk   2023年11月02日   39   0   0 Python

背景 最近一组业务redis数据不断增长需要扩容内存,而扩容内存则需要重启云主机,在按计划扩容升级执行主从切换时意外发生了数据丢失与master进入只读状态的故障,这里记录分享一下。 业务redis高可用架构 该组业务redis使用的是一主一从,通过sentinel集群实现故障时的自动主从切换,这套架构已经平稳运行数年,经历住了多次实战的考验。高可用架构大体如下图所示:简单说一下sentinel实现高可用的原理:集群的多个(2n+1,N>1)哨兵会定期轮询redis的所有master/slave节点,如果sentinel集群中超过一半的哨兵判定redis某个节点已经主观下线,就会将其判定...

  IlgtJysvQrDk   2023年11月01日   100   0   0 NoSQL

背景 线上启用memcached(以下简称mc)作为热点缓存组件已经多年,其稳定性和性能都经历住了考验,这里记录一下踩过的几个坑。 大key存储 某年某月某日,观察mysql的读库CPU占比有些异常偏高,去check慢查询log,发现部分应有缓存的慢sql居然存在几秒执行一次情况,不符合缓存数小时的代码逻辑。查看业务log在每次查询sql之后也确实有将结果set至mc之中: python代码 mc.set(cache_key,v,3600) 而set返回的取值却是False而非正常的True,很快想到mc著名的只可存储不超过1MB大小的key限制,在以往的业务场景中没有出现过这么大的key,...

  IlgtJysvQrDk   2023年11月01日   42   0   0 NoSQL
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~