随笔分类 -  Python

摘要:一、前言 面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同。面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用。 举两个大家都接触过的AOP的例子: 1)java中mybatis的@Transactional注解,大家知道被这个注解注释的函数立即就能获得DB的事 阅读全文
posted @ 2018-03-07 16:11 扎心了老铁 阅读(2547) 评论(0) 推荐(1) 编辑
摘要:1、前言 Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是UNIX-like系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。 提供的高可用场景,当你的程序出现异常 阅读全文
posted @ 2018-03-02 17:21 扎心了老铁 阅读(3680) 评论(0) 推荐(0) 编辑
摘要:如题,本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制。 1、python上下文管理(with) python上下文管理(context),解决的是这样一类问题,在进入逻辑之前需要进行一些准备工作,在退出逻辑之前需要进行一些善后工作,上下文管理可以使得这种 阅读全文
posted @ 2018-02-05 20:18 扎心了老铁 阅读(875) 评论(0) 推荐(1) 编辑
摘要:本文描述一个python实现的多进程压测工具,这个压测工具的特点如下: 多进程 在大多数情况下,压测一般适用于IO密集型场景(如访问接口并等待返回),在这种场景下多线程多进程的区分并不明显(详情请参见GIL相关)。不过一旦出现词表参数加密、返回内容校验等事情的话,多进程对发送效率的提升还是很明显的。 阅读全文
posted @ 2018-01-29 15:26 扎心了老铁 阅读(3452) 评论(0) 推荐(0) 编辑
摘要:项目中用到了限流,受限于一些实现方式上的东西,手撕了一个简单的服务端限流器。 服务端限流和客户端限流的区别,简单来说就是: 1)服务端限流 对接口请求进行限流,限制的是单位时间内请求的数量,目的是通过有损来换取高可用。 例如我们的场景是,有一个服务接收请求,处理之后,将数据bulk到Elastics 阅读全文
posted @ 2017-10-26 11:34 扎心了老铁 阅读(3494) 评论(1) 推荐(0) 编辑
摘要:硬件环境 本文适用的硬件环境如下 Redis已经成功安装,安装路径为/home/idata/yangfan/local/redis-3.2.1。 我们要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群。 1、启动Redis多个实例 我们在Redis安装目录下创建目 阅读全文
posted @ 2017-10-16 15:39 扎心了老铁 阅读(36954) 评论(2) 推荐(5) 编辑
摘要:本文讲述基于zookeeper选主与故障切换的方法。我们的例子使用的是python。 使用的库是kazoo,安装方式 应用场景: 多个实例部署,但不是“去中心化”的部署方式; 有且只有一个节点作为master,履行master的职责,在例子中是注册调度器; 其他实例作为slave,不提供调度功能,但 阅读全文
posted @ 2017-10-14 15:06 扎心了老铁 阅读(3687) 评论(3) 推荐(0) 编辑
摘要:Redis是建立在TCP协议基础上的CS架构,客户端client对redis server采取请求响应的方式交互。 一般来说客户端从提交请求到得到服务器相应,需要传送两个tcp报文。 设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求10 阅读全文
posted @ 2017-10-10 18:04 扎心了老铁 阅读(27226) 评论(0) 推荐(1) 编辑
摘要:AMQP(Advanced Message Queuing Protocol, 高级消息队列协议)是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制 阅读全文
posted @ 2017-10-06 22:46 扎心了老铁 阅读(6430) 评论(2) 推荐(1) 编辑
摘要:python因为其全局解释器锁GIL而无法通过线程实现真正的平行计算。这个论断我们不展开,但是有个概念我们要说明,IO密集型 vs. 计算密集型。 IO密集型:读取文件,读取网络套接字频繁。 计算密集型:大量消耗CPU的数学与逻辑运算,也就是我们这里说的平行计算。 而concurrent.futur 阅读全文
posted @ 2017-10-05 00:15 扎心了老铁 阅读(34293) 评论(2) 推荐(5) 编辑
摘要:1、with操作符 在python中读写文件,可能需要这样的代码 try-finally读写文件 同样,在python中使用线程锁,可能需要这样的代码 try-finally线程锁 可能你会觉得这种写法很不方便,python提供了with操作符,你可以这样操作 with读写文件 with线程锁 是不 阅读全文
posted @ 2017-10-04 21:22 扎心了老铁 阅读(1925) 评论(0) 推荐(0) 编辑
摘要:使用django开发,对python manage.py ***命令模式肯定不会陌生。比较常用的有runserver,migrate。。。 本文讲述如何自定义扩展manage命令。 1、源码分析 manage.py文件是通过django-admin startproject project_name 阅读全文
posted @ 2017-10-03 17:09 扎心了老铁 阅读(4343) 评论(3) 推荐(0) 编辑
摘要:本文实现了一个重试的装饰器,并且使用了指数退避算法。指数退避算法实现还是很简单的。先上代码再详细解释。 1、指数退避算法 欠奉。http://hugnew.com/?p=814 2、重试装饰器retry实现 这里我们自己定义了两个东西: 1)枚举类Result,标识过程调用的状态,其中有三个状态,成 阅读全文
posted @ 2017-09-27 13:54 扎心了老铁 阅读(2443) 评论(0) 推荐(1) 编辑
摘要:本文记录一些redis事务相关的原理。 1、基本概念 1)什么是redis的事务? 简单理解,可以认为redis事务是一些列redis命令的集合,并且有如下两个特点: a)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 阅读全文
posted @ 2017-09-17 15:08 扎心了老铁 阅读(13519) 评论(0) 推荐(2) 编辑
摘要:在前一篇我们说了,mybatis-generator反向生成代码。 这里我们开始说如何在django中反向生成mysql model代码。 我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码。 正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数 阅读全文
posted @ 2017-09-08 23:22 扎心了老铁 阅读(20413) 评论(3) 推荐(2) 编辑
摘要:在这一篇中我们实现了不通过zk来编写codis集群proxys的api,http://www.cnblogs.com/kangoroo/p/7481567.html 如果codis集群暴露zk给你的话,那么就方便了,探活和故障摘除与恢复codis集群都给你搞定了,你只需要监听zookeeper中实例 阅读全文
posted @ 2017-09-06 17:00 扎心了老铁 阅读(1025) 评论(0) 推荐(0) 编辑
摘要:在使用codis时候,我们遇到的场景是,公司提供了HA的Proxy(例如N个),但是不暴露zookeeper(也就是说没有codis后端服务列表)。 如果暴露zk的话,可以看这一篇,http://www.cnblogs.com/kangoroo/p/7485760.html 要求在开发客户端api的 阅读全文
posted @ 2017-09-05 19:38 扎心了老铁 阅读(1412) 评论(0) 推荐(0) 编辑
摘要:当你跑通了前面一个demo,博客地址:http://www.cnblogs.com/kangoroo/p/7299920.html,那么你的分布式异步之旅已经起步了。 性能和稳定性是web服务的核心评价指标。下面我们来说,怎么样部署服务,实现web服务的高并发和高可用。 我们将通过一些工具和部署,提 阅读全文
posted @ 2017-08-28 17:37 扎心了老铁 阅读(4771) 评论(0) 推荐(0) 编辑
摘要:java服务端的代码请看上文。 1、说明: 这两篇文章其实解决的问题是,当使用python去访问大数据线上集群的时候,遇到两个问题: 1)python-hadoop和python-hive相关包链接不稳定,表现为经常出现链接超时; 2)如果使用fork进程执行hadoop fs或者hive -e的方 阅读全文
posted @ 2017-08-25 11:41 扎心了老铁 阅读(2660) 评论(0) 推荐(0) 编辑
摘要:熟悉web开发的同学对hook钩子肯定不陌生,通过钩子可以方便的实现一些触发和回调,并且做一些过滤和拦截。 django中的中间件(middleware)就是类似钩子的一种存在。下面我们来介绍一下,并且给出一些实例。 1、Middleware的工作流程 我盗了一个图,看网上很多人用这个图,来源已经追 阅读全文
posted @ 2017-08-14 16:43 扎心了老铁 阅读(995) 评论(0) 推荐(0) 编辑