谈一谈Python的上下文管理器

经常在Python代码中看到with语句,仔细分析下,会发现这个with语句功能好强,可以自动关闭资源。这个在Python中叫上下文管理器Context Manager。那我们要怎么用它,什么时候用它呢。这里我们就来聊一聊。 上下文管理器的作用 很多情况,当我们……

阅读全文

Linux上的后台进程管理工具Supervisor

当你的系统上有许多工作进程在跑,你想要一个统一的入口来管理这些进程,包括状态检查,启动和关闭,出错时警告,及自动重启等。那你就需要一个进程管理工具来帮助你。Supervisor就是其中一个简单而又强大的工具。虽说标题写了Linux,其实它可以用在大部分Un……

阅读全文

分布式任务队列Celery的介绍

在程序运行过程中,要执行一个很久的任务,但是我们又不想主程序被阻塞,常见的方法是多线程。可是当并发量过大时,多线程也会扛不住,必须要用线程池来限制并发个数,而且多线程对共享资源的使用也是很麻烦的事情。还有就是前面几篇介绍过的协程,但是协程毕竟还是在同一线程……

阅读全文

基于协程的Python网络库gevent介绍

继续Python协程方面的介绍,这次要讲的是gevent,它是一个并发网络库。它的协程是基于greenlet的,并基于libev实现快速事件循环(Linux上是epoll,FreeBSD上是kqueue,Mac OS X上是select)。有了gevent,协程……

阅读全文

用greenlet实现Python中的并发

在上一篇介绍生成器时,我们讲到了协程(Coroutine),它也被称为微线程。回顾一下,协程可以在一个函数执行过程中将其挂起,去执行另一个函数,并在必要时将之前的函数唤醒。在Python的语言环境里,协程是相当常用的实现”并发”的方……

阅读全文

谈谈Python的生成器

第一次看到Python代码中出现yield关键字时,一脸懵逼,完全理解不了这个。网上查下解释,函数中出现了yield关键字,则调用该函数时会返回一个生成器。那到底什么是生成器呢?我们经常看到类似下面的代码 def count(n): x = 0 while x < n: yield x x += 1 for i in count(5): print i 这段代码执行……

阅读全文

关于Python的Mixin模式

像C或C++这类语言都支持多重继承,一个子类可以有多个父类,这样的设计常被人诟病。因为继承应该是个”is-a”关系。比如轿车类继承交通工具类,因为轿车是一个(“is-a”)交通工具。一个物品不可能是多种不同的……

阅读全文

探讨下Javascript中的Promise模式

Javascript最令人称道的就是它的事件回调模式,因此即使只有一个执行线程,它也能支持异步高并发。不过回调写多了,代码就会非常复杂难懂,因为回调不像同步代码,执行顺序是从上至下,读回调代码必须跳来跳去,思考什么情况下到底跳到了什么地方,很辛苦,这种情况……

阅读全文

CSS样式选择优先级

记录一下之前看到过的CSS样式优先级计算方法。 CSS的样式优先级由一个4位数字权重表示,对于同一个文档元素,如果存在多个样式,就比较每个样式4位数的优先级权重,然后选择值较大的那个。那么这4位数权重是怎么计算的呢? 一般我们添加样式有以下几种方法: 内联样式 通……

阅读全文

Flask补充系列–将应用部署在Heroku上

之前曾经介绍过如何将Flask应用部署在自己的服务器上,对于手头并不宽裕的程序员来说,购置一台托管服务器还是一笔不小的开销。即便现在有公有云服务器可以买,不过如果你只是以学习为目的,这笔开销还是能省则省了。另外,如果你的应用中需要访问国外被河蟹掉的资源,在……

阅读全文