
python
果汁华
这个作者很懒,什么都没留下…
展开
-
使用sqlparse解析table_name,超级强大,支持子查询, left join等
最近有一个需求是提取sql中的表名,网上搜了下解决方案,基本都是使用sqlparse去解析。然后研究了一下午,参考了一些其他的代码,搞了一个比较全的获取table_name的代码。网上很多都是不完整,例如:只有子查找,left join的表显示不了等等。show codeimport sqlparsefrom sqlparse.sql import IdentifierList...原创 2020-02-12 21:44:26 · 4648 阅读 · 1 评论 -
python优雅的工厂模式(不使用字典和eval),自动注册!!!!
简单说下工厂方法模式和抽象工厂模式工厂方法模式定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式就是简单工厂模式的进一步抽像。由于面向对象多态性,工厂方法模式保持了简单工厂的有点同时克服了他的缺点。工厂方法模式中,核心的工厂被提升为一个抽象类,将具体的创建工作交给他的子类完成。这个抽象的工厂类仅规定具体工厂实现的接口,而不...原创 2020-01-03 21:30:47 · 1180 阅读 · 0 评论 -
python中类方法、类实例方法、静态方法的使用与区别
之前也了解一些,没有完全的理解透彻(就是一知半解),前几天面试被问到这个问题,回答的不是很满意。先剽窃个图看一下 接着上代码# coding=utf-8class A(object): def __init__(self, x=0): self.x = x #类实例方法 # 最常见的实例方法 def foo(self, y=0):原创 2017-02-26 21:46:03 · 11554 阅读 · 6 评论 -
python 单线程和多线程
单线程, 在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那么一定要先排一下顺序。#coding=utf-8import threadingfrom time import ctime,sleepdef music(func): for i in range(2): print "I was listening to %s. %s原创 2017-02-27 16:50:14 · 4043 阅读 · 0 评论 -
celery 定时任务
Celery定时任务在celery中执行定时任务非常简单,只需要设置celery对象的CELERYBEAT_SCHEDULE属性即可。下面我们接着上面的代码,在celeryconfig.py中添加CELERYBEAT_SCHEDULE变量:CELERY_TIMEZONE = 'UTC'CELERYBEAT_SCHEDULE = { 'taskA_schedule' : {原创 2017-03-28 22:36:53 · 702 阅读 · 0 评论 -
tornado 概述
模块索引最重要的一个模块是web, 它就是包含了 Tornado 的大部分主要功能的 Web 框架。其它的模块都是工具性质的, 以便让 web 模块更加有用 后面的 Tornado 攻略 详细讲解了 web 模块的使用方法。主要模块web - FriendFeed 使用的基础 Web 框架,包含了 Tornado 的大多数重要的功能 escape - XHTML, JSON, URL 的编码/解码原创 2017-03-23 17:33:27 · 613 阅读 · 0 评论 -
python GIL 问题(multiprocessing和ctypes)
GIL全称Global Interpreter Lock 全局解释器锁(货真价实的全局线程锁)我们先来看一个问题。运行下面这段 python 代码,CPU 占用率是多少?# 请勿在工作中模仿,危险:)def dead_loop(): while True: passdead_loop()答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU。在我的转载 2017-05-24 16:44:35 · 829 阅读 · 0 评论 -
collections模块基本介绍
大家都知道python有一些内置的数据类型,比如str, int, tuple, dict, list等。collections模块在这些基础上,提供了几个额外的数据类型: 1.namedtuple() 生成可以使用名字来访问元素内容的tuple子类(还可用于判断类型) 2.deque(): 双端队列(list长度过长时推荐使用),还可以限定队列长度,适合队列和栈操纵。 3.Counter:原创 2017-06-07 15:49:11 · 448 阅读 · 0 评论 -
python 偏函数(functoosl, partial)
functools在python中是一个很重要的模块,提供了很多有用的高阶函数(一个可以接受函数作为参数或者返回值是一个函数的 函数)。比如其中一个就是偏函数(Partial function)。在介绍函数参数时,我们就讲过,通过设定参数的默认值,可以降低调用函数的难道,比如: python中int函数,把字符串转换成数字,有一个参数是base,默认值是10,表示函数十进制转换,如果改变这个bas原创 2017-06-08 19:49:27 · 423 阅读 · 0 评论 -
Django中的cookie与session
上图很明显的展示了Django的session与cookie的实现原理。服务器会生成两份相同的cookie字符串,一份保存在本地,一份发向请求的浏览器。浏览器将收到的cookie字符串保存下来,当下次再发请求时,会将信息与这段cookie一同发送到服务器,服务器得到这段cookie会与本地保存的那份判断是否相同,如果相同就表示用户已经登录成功,保存用户登录成功的状态。Django的session保存原创 2017-02-26 20:10:29 · 508 阅读 · 0 评论 -
python装饰器-限制函数调用次数(10s调用一次)
这是博主最近一家大公司的面试题,写一个装饰器,限制函数每10s调用一次。当时是笔试的,只写了大概的代码,回来后温习了python装饰器的基础知识,把代码写完了。决定写篇博客记录下。装饰器分为带参数得装饰器以及不带参数得装饰器。#不带参数的装饰器@dec1@dec2def func(): ...#这个函数声明等价于func = dec1(dec2(func))#带参数的装饰器@原创 2017-02-26 12:24:37 · 7527 阅读 · 1 评论 -
python读取目录下所有内容
写了个小函数供前端读取配置文件,转换成json。(记录下) 主要使用os模块。 os.path.isdir 判断是否为目录 os.listdir 列出该目录下所有文件SHORTCODE_PATH = '/Users/apple/'def shortcodes(path): if os.path.isdir(path): files = os.listdir原创 2017-02-20 09:48:43 · 538 阅读 · 0 评论 -
实现基于mongo的REST
随着NoSQL的广泛使用,mysql这类传统的关系型数据的使用逐渐减少。django对mysql的REST支持大家应该都很清楚,但是对mongo的支持似乎并不是这么完美,还需要自己添添补补,用起来总是不顺手。公司刚好有个项目是对mongo数据的增删改查操作,借这个机会我写了一个基类实现mongo的REST,这个类基于django的View(from django.views.generic im原创 2017-02-20 09:38:51 · 1071 阅读 · 0 评论 -
django+nginx+supervisor+gunicorn+gevent 网站部署
django,nginx,supervisor,gunicorn,gevent这几个都是在本领域大名鼎鼎的软件,下面的部署都是在ubuntu12.04里面验证成功的!首先是安装这些软件在ubuntu下面都比较简单,nginx和supservisor的安装如下apt-get install nginx,supervisor在ubuntu下使用python,强烈建议安装python-dev安装dj转载 2017-02-28 19:21:21 · 2092 阅读 · 0 评论 -
Nginx + Gunicorn(+gevent) + Django
这段时间在腾讯云搞了个主机和域名,部署个人网站。基本完成了。(www.guozhihua.cc)折腾了几天吧,记录下。我的环境是centos7的,先安装nginx和pip压压惊。yum install python-pipyum install nginx然后用pip安装个django。pip install django依然用pip安装gunicorn, gevnetpip install原创 2016-11-02 10:55:14 · 3695 阅读 · 1 评论 -
入门python--类与面向对象(3)
>>> class people(object):... age = 10 # 数据属性... def __init__(self, name): # 函数属性:构造函数... self.name = name... def say(self): # 函数属性:析构函数... print 'good bye:%s' %原创 2016-10-17 16:01:50 · 364 阅读 · 0 评论 -
入门python-异常(2)
异常相关捕获异常: try:except: # 捕获所有的异常 等同于except Exception:except name: # 捕获指定的异常except name, value: # 捕获指定的异常和额外的数据(实例)except (name1, name2):except (name1, name2), value:exce原创 2016-10-17 14:33:40 · 361 阅读 · 0 评论 -
入门python(1)
网上整理了些python入门文档供大家学习。类型和运算寻求帮助:dir(obj) # 简单的列出对象obj所包含的方法名称,返回一个字符串列表help(obj.func) # 查询obj.func的具体介绍和用法eg:>>> a = 'abc'>>> dir(a)['__add__', '__class__', ...]>>> help(a.lower)Help on built-i原创 2016-10-17 10:32:40 · 392 阅读 · 0 评论 -
django QuerySet对象转换成字典对象
>>> from django.contrib.auth.models import User >>> from django.forms.models import model_to_dict >>> u = User.objects.get(id=1) >>> u_dict = model_to_dict(u) >>> type(u) <class 'django.contr原创 2016-10-10 13:30:55 · 20858 阅读 · 1 评论 -
用Fabric优雅的发代码
程序员部署发布代码的时候多了,一点会觉得麻烦。开发环境、测试环境、生产环境。需要用个工具来帮我做这件事,不然每次更新发布代码,还得登录服务器执行命令,实在繁琐。目前python有两种比较主流的工具,一个是fabric([http://www.fabfile.org/](http://www.fabfile.org/)),还有一个是ansible(fabric简单易用,ansible专业)。1.安装原创 2017-08-31 17:36:18 · 1460 阅读 · 0 评论 -
python 类方法
python中类其实有3个方法,静态方法(static method), 类方法(class method),和实例方法(最常用)其中静态方法和普通函数是一样的。问题:@staticmethod修饰的方法函数与普通的类外函数,为什么不直接使用普通函数? @staticmethod是把函数嵌入到类中的一种方式,函数就属于类,同时表明函数不需要访问这个类。通过子类的继承覆盖,能更好的组织代码。关于调用原创 2017-12-21 16:35:36 · 1437 阅读 · 0 评论 -
sentry中python sdk 捕捉异常原理
最近有个任务把线上的异常用sentry收集,搭建和上报还是比较顺利。官网文档详细。点个赞。部署上线后,我对它是怎么捕捉异常的产生疑问,下载了源码(https://github.com/getsentry/sentry-python),分析了一下。首先,查看sentry_sdk中api.py文件,这里的一个capture_exception方法引起了我的注意,应该能顺着它知道捕捉异常的地方...原创 2019-09-20 13:18:49 · 2302 阅读 · 0 评论 -
mysqlclient和pymysql如何选择?_gevent_waiter的使用
使用python连接mysql,是需要三方包的,目前主流的方式就是pymysql 和 mysqlclient(也就是Python3版本的MySQLdb)。还有一个cymysql(fork of pymysql with optional C speedups) 1. 两个库的作者是同一个人INADA Naoki, pip库邮箱都指向mailto:songofacandy@gmail...原创 2019-01-24 20:59:32 · 14417 阅读 · 2 评论 -
小试---k-近邻(kNN)算法
先来说说概念,什么事k近邻算法?kNN算法的核心思想是用距离最近的k个样本数据的分类来代表目标数据的分类。 其原理具体地讲,存在一个训练样本集,这个数据训练样本的数据集合中的每个样本都包含数据的特征和目标变量(即分类值),输入新的不含目标变量的数据,将该数据的特征与训练样本集中每一个样本进行比较,找到最相似的k个数据,这k个数据出席那次数最多的分类,即输入的具有特征值的数据的分类...转载 2019-01-17 22:29:28 · 581 阅读 · 0 评论 -
python中try-except-finally中使用递归的
昨天发现try-except-finally中使用递归,结果掉进坑里了,爬了好久,好久..... 需求是这样的,我们请求三方一个接口,这个接口呢,有时候不稳定,需要重试,最大重试测试是5次,当时的代码大致是这样的。def request_interfaces(num): print("request_interfaces num:%s" % num) rai...原创 2019-01-12 16:15:03 · 1252 阅读 · 0 评论 -
使用redis实现排行榜功能
排行榜功能是一个很普遍的需求。设想在一个游戏中,有上百万的玩家数据,如果现在需要你根据玩家的经验值整理一个前20名的排行榜,你会怎么做呢?你不可能 order by + limit 去实现select * from game_socre order by score desc limit 0,20 使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择。首先介绍下,...原创 2018-12-30 17:10:18 · 5880 阅读 · 0 评论 -
python代码调优,谁在调用数据库连接?
最新在优化一个复杂的页面,复杂到什么情况呢,光请求就可能有30到50个,这种情况下,如果每个请求大概有3,5个数据库请求的话,我们打开这个页面,就可能产生150个数据库请求,打开这个页面时间超过30秒。。。。老大说到了无法容忍的地步,下发指令,2秒打开页面,做不到就滚蛋(完成了会所嫩模)。 苦逼的码农,为了养家糊口(嫩模),只能分析这个页面。这个页面主要的问题是,有N个图表组成...原创 2018-11-10 15:21:11 · 318 阅读 · 0 评论 -
python优雅的记录日志(堆栈追踪)
工作3年,解决线上问题无数。日志对于定位和分析问题的重要行不言而喻。那么python怎么优雅的记录日志呢? 首先,python记录日志,首选是logging模块,没有啥争议。 日志的一般写法是这样的:logging.info('info message')logging.error('error message') 这种日志一般作用不大,只能定位到...原创 2018-11-10 14:45:59 · 8288 阅读 · 3 评论 -
权限系统设计
导读 DMP作为一个大数据管理平台,使用平台的人员众多,使用DMP系统目的可能会有所区别,有的人需要制作报告,有的只需要阅读报告。阅读报告时,不同的人看到的数据也会有所区别,例如:北京公司的财务和深圳公司的财务看到的财务报告是不同的。DMP系统提供的强大的权限系统来灵活的给使用者分配角色,安全高效的使用DMP。1.简谈原理 谈到权限控制的设计,需要先理清楚定义和原理。...原创 2018-11-06 14:06:56 · 2572 阅读 · 2 评论 -
PyCharm配置black,代码格式化工具
合作开发项目时,每一个人代码风格不一致,后期维护成本会提高,需要制定代码风格统一标准。目前市面上用的比较多的python代码格式化工具有YAPF、Black。今天主要介绍下black。源码;https://github.com/ambv/black1.安装python3.6环境,这个是比较蛋疼,但是python的多环境管理,还是比较方便的,用个virtualenv(https://blog.c...原创 2018-09-01 15:16:27 · 9207 阅读 · 0 评论 -
使用redis中setnx保证资源的原子性操作
在多进程(线程)访问共享资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。原子操作(atomic operation)是不需要synchronized,这是多线程编程的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。最新有这个业务需求,所以写了个装饰器,保证同一个v...原创 2018-07-16 14:12:19 · 16035 阅读 · 3 评论 -
python 工厂模式之abstract factory(抽象工厂)
Abstract Factory模式 提供一个共同的接口来创建相互关联的多个对象。抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。 不过使用抽象工厂是有条件的:1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品在一起使用,这一约束必须在系统的设计中体现出来。 定义两个类,Dog和Cat,都拥有speak方法class Dog(obj...原创 2018-05-14 18:08:12 · 565 阅读 · 0 评论 -
python 类中__slots__ 和 @property
slots 将字符串属性名称顺序赋值给特殊的__slots__类属性,就可以限制类的实例将有的合法属性集。这个比较简单,例如:>>> class people(object):... __slots__ = ['age', 'name’]限制了people只有age和name的属性。对比下就知道了。>>> class all(object):… ...原创 2018-04-30 14:53:12 · 232 阅读 · 0 评论 -
简单聊聊微信红包及其算法
昨天有个小伙伴在微信群里发一篇文章《如何实现抢红包算法》,本着学习的精神(上班太闲) 打开了看看。文章主要是介绍了两种方法1.二倍均值法剩余红包金额为M,剩余人生为N,那么有如下的公式:每次抢到的金额 = 随机区间 (0, M/N *2)举个例子:假设有10个人,红包金额为10元,第1个人抢到的金额范围为 (0, 10/10 * 2),平均为1 元。第2个人抢到的金额范围为 (0, 9/9 * 2...原创 2018-04-30 14:02:46 · 8165 阅读 · 2 评论 -
用Selenium + ChromeDriver 实现多屏滑动截取+拼接(有源码)
功能来源需求。近期产品提出一个小需求,对自家的html截屏定期发送给用户,初到公司觉得小意思啊,之前做过htmltopdf的功能,然后在pdftopng不是就好了。本是其他组的活,那个组最近活比较多,本着相互帮助(zhuangbi)的原则,揽下活。想了想,应该直接html to png就搞定的,google下,果然有现成的轮子。找到一个靠谱的轮子-webkit2png,下载包,啪啪啪敲代码...原创 2018-04-05 15:26:00 · 6935 阅读 · 4 评论 -
python 类中 __call__与__init__
最近看到项目中有人用了__call__,google了学习一下__init__应该大家都知道,还是说一下,就是类的构造器,初始化一个类(创建一个类的实例)class Student(object): def __init__(self, name): self.name = name调用的时候是这样的>>> a = Student('jack')&g...原创 2018-03-31 16:07:25 · 1542 阅读 · 1 评论 -
python hug框架入门
本身用过django和tornado,一个是大而全,一个是围绕协程和异步IO的两个库,各有优势。今天来聊下新的web框架---hug,看看它有什么本事。首先,hug的定义是一个RESTFUL API的框架,如果你需要搭建一个API服务,那么HUG可能是你的最佳选择。准备工作就不说了,无非就是pip install hug国际惯例,写hello.py咯。import hug@hug.get('...原创 2018-03-31 15:38:17 · 4542 阅读 · 0 评论 -
python 内置方法(1)
闲来无事,整理学习下python内置的一些方法。参考官网:https://docs.python.org/2/library/functions.htmlabs(x) 返回一个数的绝对值。可以是长整型,小数等等。>>> abs(-9)9>>> abs(-0.9)0.9>>> abs(-9999L)9999Lall(iterable) 检测一个可迭代的对象中的值是否都为真。注意为原创 2018-01-09 16:00:09 · 516 阅读 · 0 评论 -
简谈python hashlib
使用Python中的hashlib来进行hash加密是非学简单的,下面是一段简单代码:import hashlib md5 = hashlib.md5() #创建一个MD5加密对象 md5.update("good good study") #更新要加密的数据 print md5.digest() #加密后的结果(二进制) print md5.hexdigest() #加密后的结原创 2016-07-20 11:02:22 · 488 阅读 · 0 评论 -
python 有序字典OrderedDict
python中的字典对象以“键:值”的方式存取数据。使用如下:>>> dict = {'a': 1, 'b': 2, 'c': 3}>>> dict{'a': 1, 'c': 3, 'b': 2}>>> for k , v in dict.items():... print k, v...a 1c 3b 2可以看出,在python中字典是无序的。有些情况下,需要有序的字典,怎原创 2016-06-14 15:46:17 · 4656 阅读 · 0 评论