01 2017 档案

摘要:如果一个函数直接或者间接调用了自己,那么就形成了递归(recursion),比如斐波那契数列的一个实现 def fib(n): if n <= 2: return 1 else: return fib(n - 1) + fib(n - 2) 递归一定要有结束条件,否则就形成了死循环, 比如下面的例子 阅读全文
posted @ 2017-01-27 14:47 xybaby 阅读(5764) 评论(0) 推荐(2) 编辑
摘要:在前面的文章中提到python原生的generator是semicoroutine,而greenlet是 真 协程。本文内容主要来自对官网文档的翻译,在其中也加入了很多自己的理解和例子。主要包括以下内容:什么是greenlet,greenlet的切换与函数调用的区别,greenlet的生命周期,以及 阅读全文
posted @ 2017-01-22 21:07 xybaby 阅读(22800) 评论(1) 推荐(11) 编辑
摘要:本文主要介绍python中Enhanced generator即coroutine相关内容,包括基本语法、使用场景、注意事项,以及与其他语言协程实现的异同。 enhanced generator 在上文介绍了yield和generator的使用场景和主意事项,只用到了generator的next方法 阅读全文
posted @ 2017-01-22 09:11 xybaby 阅读(3252) 评论(0) 推荐(3) 编辑
摘要:本文将由浅入深详细介绍yield以及generator,包括以下内容:什么generator,生成generator的方法,generator的特点,generator基础及高级应用场景,generator使用中的注意事项。本文不包括enhanced generator即pep342相关内容,这部分 阅读全文
posted @ 2017-01-21 21:18 xybaby 阅读(22673) 评论(5) 推荐(20) 编辑
摘要:gunicorn支持不同的worker类型,同步或者异步,异步的话包括基于gevent、基于eventlet、基于Aiohttp(python版本需要大于3.3),也有多线程的版本。下面是gunicorn当前版本(19.6.0)支持的Worker类型: sync eventlet - Require 阅读全文
posted @ 2017-01-20 16:00 xybaby 阅读(2915) 评论(1) 推荐(0) 编辑
摘要:在这篇文章中,提到了Master进程对信号的处理函数,其中有两个信号比较有意思。 SIGHUP:用来热更新(Reload)应用 SIGUSR2:用来在线升级(upgrade on the fly)gunicorn 下面来详细看一下: SIGHUP: Reload the configuration, 阅读全文
posted @ 2017-01-20 09:49 xybaby 阅读(4368) 评论(0) 推荐(0) 编辑
摘要:如前文所述,Arbiter是gunicorn master进程的核心。Arbiter主要负责管理worker进程,包括启动、监控、杀掉Worker进程;同时,Arbiter在某些信号发生的时候还可以热更新(reload)App应用,或者在线升级gunicorn。Arbiter的核心代码在一个文件里面 阅读全文
posted @ 2017-01-20 09:33 xybaby 阅读(3165) 评论(2) 推荐(0) 编辑
摘要:gunicorn是一个python Wsgi http server,只支持在Unix系统上运行,来源于Ruby的unicorn项目。Gunicorn使用prefork master-worker模型(在gunicorn中,master被称为arbiter),能够与各种wsgi web框架协作。gu 阅读全文
posted @ 2017-01-19 23:02 xybaby 阅读(49558) 评论(2) 推荐(3) 编辑
摘要:bottle 是一个轻量级的python web框架, 可以适配各种web服务器,包括python自带的wsgiref(默认),gevent, cherrypy,gunicorn等等。bottle是单文件形式发布,源码在这里可以下载,代码量不多,可以用来学习web框架。这里也有官方文档的中文翻译。 阅读全文
posted @ 2017-01-19 14:14 xybaby 阅读(25400) 评论(1) 推荐(6) 编辑
摘要:wsgi全称是"Web Server Gateway Interfacfe",web服务器网关接口,wsgi在python2.5中加入,是web服务器和web应用的标准接口,任何实现了该接口的web服务器和web应用都能无缝协作。来看一个形象点的图: 如上图所示(图片来自这里),wsgi一端连接we 阅读全文
posted @ 2017-01-18 22:53 xybaby 阅读(6575) 评论(0) 推荐(2) 编辑
摘要:在之前的文章有提到__getattr__函数的作用: 如果属性查找(attribute lookup)在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数, 如果没有定义这个函数,那么抛出AttributeError异常。由此可见,__getattr__一定 阅读全文
posted @ 2017-01-12 23:35 xybaby 阅读(48369) 评论(0) 推荐(9) 编辑
摘要:filter(function, iterable): Construct a list from those elements of iterable for which function returns true. 对iterable中的item依次执行function(item),将执行结果为 阅读全文
posted @ 2017-01-12 13:10 xybaby 阅读(1164) 评论(0) 推荐(0) 编辑
摘要:上一篇文章开始的时候提到 “一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者参数)” 有一般情况,就有特殊情况。第一种特殊情况:装饰器可能也是一个类;第二种特殊情况:装饰器返回的对象的类型不一定等同于被装饰对象的类型。 对于第一种情况,我们知道对于任何call 阅读全文
posted @ 2017-01-11 21:26 xybaby 阅读(488) 评论(0) 推荐(0) 编辑
摘要:一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者类)。首先来看一个简单的例子: 1 # -*- coding: utf-8 -*- 2 def log_cost_time(func): 3 def wrapped(*args, **kwargs): 4 imp 阅读全文
posted @ 2017-01-11 21:24 xybaby 阅读(1915) 评论(0) 推荐(0) 编辑
摘要:在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候。 在上一文章末尾,给出了一段代码,就涉及到descriptor与attribute lookup的问题。而get系列函数(__get__, __getattr__, __geta 阅读全文
posted @ 2017-01-10 19:34 xybaby 阅读(16634) 评论(3) 推荐(11) 编辑
摘要:descriptor简介 在python中,如果一个新式类定义了__get__, __set__, __delete__方法中的一个或者多个,那么称之为descriptor。descriptor有分为data descriptor与non-data descriptor, descriptor通常用 阅读全文
posted @ 2017-01-09 21:53 xybaby 阅读(6740) 评论(0) 推荐(3) 编辑
摘要:python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们的代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) Return True if any element of the iterable is true. 阅读全文
posted @ 2017-01-07 17:24 xybaby 阅读(1801) 评论(0) 推荐(2) 编辑

点击右上角即可分享
微信分享提示