![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 58
lcf枫
shopee 后台开发
展开
-
python内存泄漏
python 内存泄漏定位不同的语言有不同定位的方式。对于golang 而言。pprof 工具已经足够了。C,C++,java 更是有自身的监控定位机制。这里单单阐述python的 内存泄漏。观察首先 我们可以从监控工具上看到内存的异常告警。于是开始定位是什么问题导致的。登录到具体容器上。ps -auxf 查看具体是哪个进程导致的内存暴涨。(一般也就是单服务容器)定位思路业务侧定位最近新上线的代码 通过对比排查对大表的select 操作,比如需要下载一个很大的excel。中间对数原创 2020-06-30 17:09:41 · 1287 阅读 · 0 评论 -
mysql update_time
mysql update_time在 mysql中有一个DB 是 information_schema。顾名思义就是一些schema 的信息,表的结构,字段,占用大小等等信息都在其中。今天使用到的是其中的table表。information_schema tables如下是所有的字段的含义字段含义Table_catalog数据表登记目录Table_schem...原创 2019-10-20 10:59:59 · 1700 阅读 · 0 评论 -
地址查询优化
地址查询优化地址服务是比较常见的服务,一般国家地址分了3~4个层级,省,市,区,镇。一般的查询如名称,等级都比较好查询。但是如果是查询一个省下的所有级别地址往往可能需要查询3次DB,一次查询一个级别,如果碰到地址特别多的情况,如最后一级有1w个地址,使用select * from xx where id in(xx,xx…) 这种形式,性能也不会也别好。再者还有一种情况,如果是知道了区...原创 2019-10-20 09:14:03 · 184 阅读 · 0 评论 -
迭代对象 迭代器 生成器
python 迭代对象 迭代器 生成器区别以上三者和容器分不开。容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中。迭代对象 Iterable硬性规定就是实现了__iter__() 方法的就是迭代对象。通过 Iterable 判断是否是迭代对象。>>> dic = {'a':...原创 2018-12-21 22:41:47 · 170 阅读 · 0 评论 -
python 递归
python 递归递归算是一直对我来说比较致命的一点,一直没有办法非常通透的理解。最近在业务上有一段代码几乎想不到非递归的场景。所以在这次加深了对递归的认识。python 递归的限制首先递归第一个要考虑的就是什么时候结束。结果条件没写好就会导致调用栈太深,甚至爆栈的危险。python在这里做了最大递归层数的限制。sys.getrecursionlimit()一般设置为1000。 当...原创 2018-12-18 16:24:03 · 311 阅读 · 0 评论 -
类变量继承
类变量继承项目上发现一个bug。是类变量覆盖的问题,由此记录一下。基类类变量不可用super等方式赋值。注意其是类变量如果该变量在该类中有定义,则使用该值。如果没有,将搜索父类,多继承时采用C3方法,一般不存在交叉的类都是从左到右顺序搜索。搜索过程中如果前面父类的值被重新赋值,则类变量值将改变成该值class BaseClass(object): base_info =...原创 2019-02-21 17:29:21 · 661 阅读 · 0 评论 -
celery 线上问题
celery 线上问题环境项目中使用celery 去做异步化处理。针对不同的消息队列都会启动8个worker去消费。启动入口是supervisor,拉起django 的脚本。再由脚本去拉起所有的消费进程。问题线上celery 容器不停的挂死。通过监控可以看到内存过一段时间就会到达内存配置值。这时候项目跑不动。分析既然是内存不足,首先查看了每个进程的内存使用情况。htop...原创 2019-03-04 19:14:10 · 624 阅读 · 1 评论 -
安装M2Crypto
安装M2Crypto项目上有依赖问题,requirement.txt. 使用 pip -r requirement 的方式去安装。发现其中M2Crypto 一直安装不上。对这种问题我最为头疼。碰到个别出问题一般先单独处理。先单独安装M2Crypto,再安装整个requirement。安装相应的包google 大法好:直接googlemac m2crypto 安装失败得到这这...原创 2019-03-07 11:37:43 · 4805 阅读 · 0 评论 -
pycurl 安装问题
pycurl 安装问题项目相关依赖需要安装pycurl. 这时候gunicorn 无法启动。 安装上之后报错。ImportError: pycurl: libcurl link-time ssl backend (none/other) is different from compile-time ssl backend (openssl)Internal Server Error: /...原创 2019-03-07 21:35:36 · 1063 阅读 · 1 评论 -
snow flake
snow flake分布式系统需要有一个方法去分配一个唯一的ID。如mysql 分表之后,如果各个表使用的都是自增ID 那么不同表之间的ID 就会重复,对于其他业务可能会认为是同一条数据,或者造成别的问题。所以需要一个分配ID的方法。通常有两种方式mysql使用mysql 最为关节节点,每次分配数百个ID到内存,然后应用再在内存中取值。这种方式较为复杂,并且依赖于分配器所在的DB,如...原创 2019-05-29 12:20:30 · 484 阅读 · 0 评论 -
大文件分片上传
大文件分片上传场景,在工作中很多文件都超过了10M。一般nginx 上传文件大小可能在8M的水平。如果这时候上传大文件,nginx 就会报错。方案修改nginx 配置。配置nginx 断点续传模块。使用http协议实现断点续传。nginx 修改过大可能对整体的健壮性造成影响。nginx 配置断点续传后还是需要做额外的处理,所以最终敲定使用http实现分片上传。设计单机,...原创 2019-06-11 15:07:01 · 843 阅读 · 0 评论 -
python 获取目录结构
python 获取目录结构目的: 按照某个基准目录展示分层。实现文件分层展示,可以控制层级。可以控制是否需要打印文件。主要点构建树。采取path_tree 结构构建,没有明显区分root和子树的概念因为结构都是一致的。设置level。因为这个结构可以理解为单向的链表树。增加level存储,用于展示的时候分层。层次遍历树结构。标准用法是使用stack结构。但是python似乎没有标准...原创 2019-09-05 15:37:51 · 1564 阅读 · 0 评论 -
snowflaker 问题
snowflaker 问题之前由于使用了tiDB,需要实现一个snow flaker 算法。找了一下轮子没找到。看着也简单,于是自己写了一个。然后发现了有问题。python RLockpython 的RLockRLock就是一个线程获取了锁之后可以再次获得锁。比如:如下主线程可以在for循环中取得锁。import threadingclass _RLock: def ...原创 2019-09-06 18:40:47 · 587 阅读 · 0 评论 -
celery
celerycelery 是python 做异步通信的工具包。首先我们要明白异步的原因,那就是用户可以允许的情况下,把耗时的操作拆分出去,这样子做到了当前的快速响应。同时也避免了用户一个耗时的操作因为内部资源的不足而出现超时的情况。celery使用了非常简单的方式实现了异步。主要是celery sender broker 到consumer的过程。安装celerypip install ...原创 2018-10-28 11:37:20 · 1174 阅读 · 0 评论 -
python pdb工具
pdb debug 工具 类似调试C语言的Debug工具 gdb。python也有其内置的工具–pdb。pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令,详情见表 1。官方文档: https://docs.pyt...原创 2018-09-02 14:46:55 · 438 阅读 · 0 评论 -
python 里面的单下划线与双下划线的区别(私有和保护)
Python 用下划线作为变量前缀和后缀指定特殊变量。_xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始。因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”,在模...转载 2018-07-29 22:02:29 · 463 阅读 · 0 评论 -
python 小数取整处理
◎Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;◎Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;◎Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)。...原创 2018-07-30 15:50:10 · 4499 阅读 · 0 评论 -
pycharm 调试模式
调试快捷键 不用蛋疼鼠标代码调试快捷键 序号 快捷键 作用 1 F8 单步 2 F7 单步 进入(函数调用时) 3 SHIFT + F8 单步跳出 4 ALT + F9 运行到光标所在位置处 5 ALT + F8 测试语句 6 F9 重新运行程序 7 CTRL + F8...原创 2018-07-30 17:55:55 · 693 阅读 · 0 评论 -
python 安装两个版本
多版本不兼容使用django框架时,搭建了虚拟环境。运行的时候出现:Fatal Python error: PyThreadState_Get: no current thread无论重新down代码,重新配置环境都无补于事。google 出的大意是多版本的问题。在我的 /usr/bin 确...原创 2018-07-31 12:05:56 · 739 阅读 · 0 评论 -
python 工具报错
bad interpreter尝试运行公司的smc 工具的时候报错:-bash: /usr/local/bin/smc: /usr/local/opt/python@2/bin/python2.7: bad interpreter: No such file or directory bad int...原创 2018-07-31 20:13:25 · 454 阅读 · 0 评论 -
pycharm 虚拟环境
python 虚拟环境 如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办? 这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。 关于virtualenv ...原创 2018-08-01 09:01:23 · 1982 阅读 · 0 评论 -
python 利用xlsx生成sql
python 利用xlsx生成sql 在工作中经常需要根据excel内容去插入,更新,删除数据库内容。操作了几次,写了两次读取生成sql的脚本都想想还是抽空写个抽象的转换脚本方便以后的工作。所写工具放在github上:https://github.com/chenguifeng/create_sql准备工具python安装pippip install argparse ...原创 2018-08-14 09:54:13 · 753 阅读 · 0 评论 -
python 编码问题
python 编码 在python 编程中经常会碰到字符串相关的错误。在这里做一个小结。预备知识ascii 编码 最好理解了。最初计算机体系是由美国人建立起来的,对于用英文来说,最基本的就是26个字母再加上一些奇奇葩葩的字符128就够用了。 2^7 = 128而一个字节可以表示256,所以一个字节就够了。 然而对于其他非英语国家就蛋疼了,必须创建自己符...原创 2018-08-02 09:56:33 · 186 阅读 · 0 评论 -
python 装饰器 下
装饰器 下 在上一篇里面提到了装饰器是如何诞生,装饰器的语法,函数带参数以及装饰器带参数的是用方法。除了这些用以外,本文主要讨论两个问题。一个是变成了装饰器后,有一些环境变量比如name之类的就会被修改为wrappper的包名,这个需要解决。第二个是当装饰器不止一个(当然可以写成一个,又臭又长)时,调用的顺序是怎样的,这个会比较绕。装饰器之 wrap Python装饰器(...原创 2018-08-07 09:49:05 · 172 阅读 · 0 评论 -
python 类可见性
python 类成员可见性 类似于java的语言,python也有自己的访问权限控制。面向对象的很大一部分也就在于对代码访问的在控制。本文在学习python对访问控制的学习。class TestIsVisible(object): def __init__(self, visible, invisible, non_know): self.visible ...原创 2018-08-02 17:12:12 · 2155 阅读 · 0 评论 -
python 装饰器(上)
装饰器(上) python 的装饰器属于函数式编程的范畴。维基百科可以点击链接看看维基百科上的解释。没错,我看得一脸懵逼。就目前学习的而言,我把它总结为面向函数的编程。这样就好理解一下,当然实际上肯定有所偏颇。在面向过程中,函数是组成过程的单位。面对对象的基石是对象。而函数式这种范式下函数是基石,当做变量的存在。装饰器的初衷 首先装饰这个词可以理解一下。装饰不就是在原有的...原创 2018-08-03 10:16:38 · 233 阅读 · 0 评论 -
supervisor
supervisor supervisor 是python 所写的用于管理进程的工具。Supervisor 相当强大,提供了很丰富的功能,不过我们可能只需要用到其中一小部分。安装完成之后,可以编写配置文件,来满足自己的需求。为了方便,我们把配置分成两部分:supervisord(supervisor 是一个 C/S 模型的程序,这是 server 端,对应的有 client 端:super...原创 2018-09-02 14:46:02 · 1635 阅读 · 0 评论 -
Python Argparse包——命令行解析工具
最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具。用python来实现命令行,核心计算模块可以用c自己写扩展库,效果挺好。学习了argparse,在官方文档中找到一篇toturial,简单翻译了下。http://docs.python.org/2/howto/argparse.html#id1Argparse Tuto...转载 2018-07-17 16:53:20 · 513 阅读 · 0 评论