
python
文章平均质量分 90
pushiqiang
学习分享
展开
-
关于在python项目中使用连接池的问题
对于项目中经常使用到的(数据库)连接池等场景,在一些中大型的Python项目中可能需要特别关注。由于连接池等对象既不是进程安全的也不是线程安全的,所以在初始化配置和使用连接池的时候需要明确项目的运行架构,正确安全的配置和使用。...........................原创 2022-07-13 18:36:52 · 1176 阅读 · 0 评论 -
python性能优化和源码保护-编译整个项目
Python是一门动态解释型语言,由于GIL(全局解释器锁)、GC机制等特性,python运算效率很低。同时由于python程序没有静态编译的过程,项目代码以py源码的方式交付,任何人都可以获取和修改源代码,无法做到相应的安全保护。针对这两个问题,可以将Python源代码编译生成C/C++扩展模块的形式(Windows平台生成.pyd文件,Linux生成.so文件),以动态链接库的方式调用。python调用C/C++扩展函数的时候,GIL会被锁定,直到这个函数结束。由于这期间没有python的字节码原创 2022-05-12 16:49:30 · 1441 阅读 · 4 评论 -
twisted下使用网络连接池
通过《使用twisted编写异步服务器》一文的学习,我们可以轻松使用twisted来搭建自己的服务器。前面的示例中服务端并不涉及到与外部服务器的交互,而实际的服务端往往需要同时与其他服务端进行交互(例如进行密码验证)。使用传统的os.socket连接服务器的方法虽然可行,但却并不符合异步的原则,使用deferred则可以异步的建立网络连接,频繁的网络连接总是会加大服务器压力,因此更多的时候是使用网络转载 2016-04-20 20:52:32 · 755 阅读 · 0 评论 -
使用twisted编写异步服务器
一 简介 twisted是python下的一个事件驱动的异步网络应用框架,其项目主页为http://twistedmatrix.com/trac/。 网络上关于twisted的介绍很多, 我这里就不啰嗦了。我们先来看一个使用twisted的实例。 import os, sys, timefrom twisted.internet.protocol import Protocol,Facto转载 2016-04-20 17:37:20 · 3125 阅读 · 2 评论 -
ULID - 一种比UUID更好的方案
为什么不选择UUID在分布式场景下,很多人选择了 UUID 作为 ID ,UUID 目前有 5 个版本,分别是:版本1:依赖于时间戳和 MAC 地址,容易被攻击;版本2:将版本 1 的时间戳前四位换为 POSIX 的 UID 或 GID,问题同上;版本3:基于 MD5 哈希算法生成,生成随机分布的ID需要唯一的种子,这可能导致许多数据结构碎片化;版本4:基于随机数或伪随机数生成,除了随机性外没有提供其他信息;版本5:通过 SHA-1 哈希算法生成,生成随机分布的ID需要唯一的种子,这可能导致许多原创 2021-05-28 17:52:43 · 7342 阅读 · 6 评论 -
在Docker容器中正确配置Gunicorn
Gunicorn是用于Python应用程序的通用WSGI服务器,但是大多数在Docker容器中使用的gunicorn配置都是错误的。在容器中运行gunicorn与在虚拟机或物理服务器上运行不同,并且还需要考虑Linux环境之间的差异。因此,为了保持你的Gunicorn设置正确和高效,在本文中,我将介绍:防止由于heartbeats心跳而导致缓慢。正确配置worker数。正确输出日志到标准输出。为什么Gunicorn“有时会挂半分钟”Gunicorn的master进程启动一个或多个worker翻译 2021-05-23 17:46:37 · 4600 阅读 · 1 评论 -
分布式链路追踪系统 - Jaeger在flask/django中的使用
链路追踪分布式链路追踪,也称为分布式请求追踪,是一种用于分析和监视应用程序的方法,特别是那些使用微服务体系结构构建的应用程序; 分布式追踪有助于查明故障发生的位置以及导致性能低下的原因,开发人员可以使用分布式跟踪来帮助调试和优化他们的代码。链路追踪系统核心步骤一般有三个:代码埋点,数据存储、查询展示。在数据采集过程,需要侵入用户代码做埋点,不同系统的API不兼容会导致切换追踪系统需要做很大的改动。为了解决这个问题,诞生了opentracing 规范。 +-------------+ +---原创 2021-03-06 21:35:01 · 2886 阅读 · 0 评论 -
jinja2模板渲染移除空白(空格、制表符、换行符 等)
ref:https://www.kancloud.cn/manual/jinja2/70455例如:{% if xxx %} # 空行 1something...{% endif %} # 空行 2 # 空行 3{% if xxx %} # 空行 4something...{% endif %} # 空行 5 ...转载 2020-02-29 21:37:07 · 9418 阅读 · 0 评论 -
linux下使用pyinstaller打包python脚本
最近给运维写一个系统维护的python脚本,但是被告知生产环境有很多服务器没有安装python解释器,于是在网上搜索多pyinstaller解决方案,本文简单记录之。下载pyinstaller。最新的pyinstaller版本为2.0版本,官方网站http://www.pyinstaller.org。下载链接:http://jaist.dl.sourceforge.net/projec...转载 2018-06-14 12:43:47 · 9698 阅读 · 0 评论 -
关于django的prefetch_related优化查询问题
prefetch_related 介绍参见 https://blog.youkuaiyun.com/pushiqiang/article/details/79560550在使用中发现,在对内嵌子列表再次进行filter时,prefetch_related会失效models.py定义如下:class Category(Model): """ 种类 &原创 2018-06-13 14:06:43 · 1223 阅读 · 0 评论 -
不想再被鄙视?那就看进来! 一文搞懂Python2字符编码
程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA。可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广,作为一个Python程序员,自然最关心的是下面这幅图啦我们项目组一值使用Python2.7,虽然我们也知道Python3的诸多好处,也曾经蠢蠢欲动过,但由于各种历史原因,以及业务的压力,我们只可能继续使用Python2.7。更悲哀的是,我们组不是那么internationa...转载 2018-04-12 22:22:34 · 231 阅读 · 0 评论 -
代码这样写更优雅(Python 版)
Python 这门语言最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。但有时候我们写代码,特别是 Python 初学者,往往还是按照其它语言的思维习惯来写,那样的写法不仅运行速度慢,代码读起来也费尽,给人一种拖泥带水的感觉,过段时间连自己也读不懂。《计算机程序的构造和解释》的作者哈尔·阿伯尔森曾这样说:“Programs must be written for peopl...转载 2018-04-19 23:26:53 · 283 阅读 · 0 评论 -
程序员必知的 Python 陷阱与缺陷列表
我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:Python12345678910111213141516171819>>> a=1 >>> def func(): ... a+=1 .....转载 2018-04-19 23:26:26 · 201 阅读 · 0 评论 -
Python: 你不知道的 super
super() 的入门使用在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super 来实现,比如:class Animal(object): def __init__(self, name): self.name = name def greet(self)...转载 2018-08-07 20:49:09 · 310 阅读 · 0 评论 -
高性能Python-字典和集合
当数据没有明确的顺序时,集合(sets)和字典(dictionaries)都是理想的数据结构,一个Key唯一对应一个存储对象, Key可以是一个string,也可以是任意一个hashable的对象。字典和集合的插入和查询的时间复杂度是O(1),需要额外的内存开销来支持,但是实际上,插入和查询的时间取决于在用的hash函数。dictionaries是Key-Value的集合,sets是一个Key的集...转载 2018-06-24 21:31:36 · 694 阅读 · 0 评论 -
Python黑魔法 --- 异步IO( asyncio) 协程
python asyncio网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程。无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态。使用协程可以实现高效的并发任务。Python的在3.4中引入了协程的概念,可是这个还是以生成器对象为基础,3.5则确定了协程的语法。下面将简单介绍asyncio的使用。实现协程的不仅仅是async...转载 2018-08-07 20:50:10 · 627 阅读 · 0 评论 -
关于python 装饰器
关于装饰器无参装饰器普通函数def say_hello(*args, **kwargs): print 'hello world'无参装饰器def debug(func): # debug为装饰器,func为要被装饰的函数 def wrapper(*ar...原创 2018-07-25 23:11:21 · 322 阅读 · 0 评论 -
django orm跨关系查询(跨表,多层查询)
django orm跨关系查询(ManyToManyField,ForeignKey多层查询)Django提供了一种强大而直观的方式来“跟踪”查找中的关系,在后台自动用SQL JOIN处理。 要跨越关系,只需使用跨模型的相关字段的字段名称,用双下划线分隔,直到到达所需的字段。这个例子检索所有Entry对象的 Blog,其name 为:’Beatles Blog’from django....原创 2018-07-20 21:54:38 · 9803 阅读 · 0 评论 -
Django原生sql使用Paginator分页
使用Django肯定经常使用Paginator分页,很便捷。但是他可接受的分页对象必须是django orm的查询集或者list、tuple。当需要使用原生sql查询数据,分页就无法使用Paginator。Paginator其实只需要实现两个方法count和__getitem__就可以自定义一个让Paginator分页器支持的对象,然后就可以使用Paginator分页了,不需要单独对原生sql写...原创 2018-12-19 21:45:08 · 2602 阅读 · 3 评论 -
Django单元测试类和测试数据回滚
Django单元测试每个测试用例中写入数据库的测试数据在用例执行完后都会被撤销,这是通过事务回滚或者manage.py flush实现的。TestCase与TransactionTestCase都是继承自SimpleTestCase,两者主要的区别在于:TestCase在测试开始时,判断当前连接的数据库是否支持事务特性,如支持,则开启事务操作;在测试结束时,同样判断是否支持事务特性,如支持,...转载 2019-09-26 16:38:39 · 925 阅读 · 0 评论 -
使用selenium+phantomjs模拟登录淘宝
使用自动化工具selenium可以很方便模拟淘宝登录from selenium import webdriverdriver = webdriver.PhantomJS(executable_path='/opt/phantomjs-2.1.1-linux-i686/bin/phantomjs')#driver = webdriver.Firefox()原创 2016-05-08 20:05:31 · 13435 阅读 · 4 评论 -
深入理解python中闭包,闭包的实质
闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助~ 请大家跟我理解一下,如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。闭包: 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。一般情况转载 2018-02-07 17:04:38 · 3750 阅读 · 3 评论 -
如何减少python内存的消耗?
Python 打算删除大量涉及像C和C++语言那样的复杂内存管理。当对象离开范围,就会被自动垃圾收集器回收。然而,对于由 Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情。在这篇博客中,我将会分享关于减少 Python 内存消耗的方法和分析导致内存消耗/膨胀根源的问题。这些都是从实际操作中总结的经验,我们正在构建 Datos IO 的 RecoverX 分布式备份和恢复平转载 2018-01-02 21:36:48 · 14713 阅读 · 0 评论 -
仿照django的urls风格和模块化结构的flask项目(Django-Style URL Patterns for Flask)
Django-Style URL Patterns for Flaskdjango的urls集中式路由控制相比flask通过装饰器来控制的确很一目了然,习惯了django的urls模式,突然改到flask还有点怀念,于是通过Flask.add_url_rule函数实现了一个仿django的urls模式。github:https://github.com/pu...原创 2017-07-19 09:52:01 · 1058 阅读 · 0 评论 -
关于django-channels的token认证实现
django-channels只支持基于session的认证,在实际使用中可能需要基于token或者jwt的认证。 参照 https://www.machinalis.com/blog/jwt-django-channels/ 实现基于django token认证。原创 2017-01-21 22:29:35 · 4265 阅读 · 1 评论 -
django admin添加数据自动记录user到表中的实现
1.需求:在后台添加一条数据的同时要把添加者记录到表中。2.models.pyclass Setting(models.Model): ... user = models.CharField(max_length=50, blank=True, help_text=u"添加者") ...3.admin.py@register(Setting)cla原创 2016-12-19 19:26:03 · 4250 阅读 · 0 评论 -
celery最佳实践
作为一个Celery使用重度用户,看到Celery Best Practices这篇文章,不由得菊花一紧。干脆翻译出来,同时也会加入我们项目中celery的实战经验。通常在使用Django的时候,你可能需要执行一些长时间的后台任务,没准你可能需要使用一些能排序的任务队列,那么Celery将会是一个非常好的选择。当把Celery作为一个任务队列用于很多项目中后,作者积累了一些最佳实践方式,譬转载 2016-09-19 13:49:27 · 529 阅读 · 0 评论 -
Celery 和 Redis 入门
Celery 是一个广泛应用于网络应用程序的任务处理系统。它可以在以下情况下使用:在请求响应周期中做网络调用。服务器应当立即响应任何网络请求。如果在请求响应周期内需要进行网络调用,则应在周期外完成调用。例如当用户在网站上注册时,需要发送激活邮件。发送邮件是一种网络调用,耗时2到3秒。用户应该无需等待这2到3秒。因此,发送激活邮件应当在请求响应周期外完成,celery 就能实现这一点。将转载 2016-09-18 21:20:04 · 1082 阅读 · 0 评论 -
django实现qq一键登录(qq互联)
django实现qq一键登录原创 2016-07-03 16:37:15 · 2264 阅读 · 0 评论 -
sqlalchemy多对多关系实现
sqlalchemy多对多关系实现情形一:联系人—–分组from sqlalchemy import create_engine,String,Integer,Column,ForeignKey,Table,Text,Sequencefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import原创 2016-05-14 15:28:37 · 1816 阅读 · 0 评论 -
(python解析js)selenium结合phantomjs抓取js生成的页面
有些网页是在加载时动态创建HTML内容,只要在js代码完全执行完后才会显示最终结果。如果用传统的方法抓取页面,就只能获得js代码执行之前页面上的内容。要解决这个问题有两种方法: 1.直接从js代码中抓取数据(执行js代码,解析js变量)。 2.用第三方库运行js,抓取运行后的最终html页面。在python中使用selenium执行jsselenium是一个强调的网络数据采集工具,其最初是原创 2016-05-01 15:06:50 · 26136 阅读 · 9 评论 -
python - __dict__的妙用
设想这样一个场景。我有一个字典,从某个地方获取的,比如http请求发过来的,比如从redis中hgetall出来的。我要根据这个字典来构建一个对象。比如类[python] view plain copyclass Person: def __init__(self,_obj): self.name = _o转载 2016-03-14 21:33:39 · 794 阅读 · 0 评论 -
flask + mysql + highcharts(动态刷新)实现的简单监控系统
flask + mysql + highcharts(动态刷新)实现的简单监控系统原创 2016-03-17 21:41:07 · 15241 阅读 · 0 评论 -
django使用inclusion_tag标签封装数据字典
Django_DictSelect使用inclusion_tag标签封装数据字典最近用java做一个评估系统时,填报系统的前台页面经常用到数据字典(模板标签封装select),于是产生了在django系统下实现这个功能的想法,原理很简单,使用django的inclusion_tag封装<select></select>原创 2016-03-30 00:48:29 · 1592 阅读 · 0 评论 -
flask几种参数配置方法,致初学者
方法一、直接配置 Python代码 app.config['HOST']='xxx.a.com' print app.config.get('HOST') 方法二、通过环境变量加载配置 export MyAppConfig=/path/to/settings.cfg Python代码 a转载 2017-07-26 12:41:36 · 1649 阅读 · 0 评论 -
关于flask表单验证json数据不通过总是返回False的解决方法(flask wtforms: Validation always false)
关于flask表单验证json数据不通过总是返回False的问题(flask wtforms: Validation always false)的解决方法问题描述:在flask中对表单的常用方式如下:form = MyForm(request.form)if form.validate(): # TODO pass其中表单form的初始化函数为 __i原创 2017-08-18 15:55:47 · 1810 阅读 · 0 评论 -
【python】多进程中的内存复制
比较好奇python对于多进程中copy on write机制的实际使用情况。目前从实验结果来看,python 使用multiprocessing来创建多进程时,无论数据是否不会被更改,子进程都会复制父进程的状态(内存空间数据等)。所以如果主进程耗的资源较多时,不小心就会造成不必要的大量的内存复制,从而可能导致内存爆满的情况。示例举个例子,假设主进程读取了一个大文件对象的所有行,然后通转载 2018-01-02 21:34:28 · 6341 阅读 · 0 评论 -
sanic下通过信号(blinker)创建cassandra的表索引
Cassandra是一套开源分布式NoSQL数据库系统,具有很高的写效率,而查询却不像关系型数据库那样可以通过任意字段过滤查询,虽然其有index功能,但相比关系型数据库的index并不高效.对于cassandra来说,额外的写入可以让你改进读的性能,这一般是一种好的设计,相比些读取是一种更昂贵并且更困难的东西。因此官方提倡:你的数据结构应该适应你的查询语句,而不要依据关系来设计模型.当我们需要对某原创 2017-12-02 23:33:01 · 584 阅读 · 0 评论 -
python blinker 信号库学习
转自: python.jobbole.com/85554/参考 Blinker Documentation Blinker 是一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播。Flask的信号机制就是基于它建立的。Blinker的内核虽然小巧,但是功能却非常强大,它支持以下特性:支持注册全局命名信号支持匿名信号支持自定义命名信号支持与接收者之间的转载 2017-12-02 22:32:49 · 1613 阅读 · 0 评论 -
python测试框架
nosenose 项目是于 2005 年发布的,也就是 py.test 改名后的一年。它是由 Jason Pellerin 编写的,支持与 py.test 相同的测试习惯做法,但是这个包更容易安装和维护。尽管 py.test 在某些方面有所进步,目前也很容易安装,但是 nose 仍然保持了易用性方面的声誉。nose不是python自带模块,需要用pip安装pip install nosenose相关原创 2017-10-26 15:13:16 · 7345 阅读 · 0 评论