分布式任务队列Celery的介绍

在程序运行过程中,要执行一个很久的任务,但是我们又不想主程序被阻塞,常见的方法是多线程。可是当并发量过大时,多线程也会扛不住,必须要用线程池来限制并发个数,而且多线程对共享资源的使用也是很麻烦的事情。还有就是前面几篇介绍过的协程,但是协程毕竟还是在同一线程内执行的,如果一个任务本身就要执行很长时间,而不是因为等待IO被挂起,那其他协程照样无法得到运行。本文要介绍一个强大的分布式任务队列Celery,它可以让任务的执行同主程序完全脱离,甚至不在同一台主机内。它通过队列来调度任务,不用担心并发量高时系统负载过大。它可以用来处理复杂系统性能问题,却又相当灵活易用。

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

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

Flask扩展系列–自定义扩展

介绍了那么多Flask扩展,该讲下如何写自己的扩展了。你可以写个扩展给自己的项目用,也可以发起审核申请,审核通过的扩展会显示在官方扩展列表中。本篇中,让我们创建一个为视图访问加日志的扩展Flask-Logging,并从中了解到写Flask扩展的规范。

Flask扩展系列(九)–HTTP认证

上一篇中,我们介绍了用户会话管理和登录验证,那么对于HTTP请求上的认证,比如Restful API请求的认证要怎么做呢?因为Restful API不保存状态,无法依赖Cookie及Session来保存用户信息,自然也无法使用Flask-Login扩展来实现用户认证。所以这里,我们就要介绍另一个扩展,Flask-HTTPAuth。

Flask扩展系列(七)–表单

表单Form,在Web应用中无处不在。在介绍Flask入门时,我们曾经做过一个非常简单的用户登录表单。其实所有的表单项都有共性,比如有文字输入框,单选框,密码输入框等;此外表单的验证也有共性,比如有非空验证,长度限制,类型验证等。如果有个框架,能把这些共性抽象出来,那就能大量简化我们的工作。Python的WTForms就提供了这些功能,这里我们就要结合Flask的WTForms扩展,Flask-WTF,来介绍如何在Web应用中制作表单。

Flask扩展系列(六)–缓存

如果同一个请求会被多次调用,每次调用都会消耗很多资源,并且每次返回的内容都相同,大家第一个反应就是该使用缓存了。的确对于大规模互联网应用,缓存是必不可少的,一个好的缓存设计可以使得应用的性能几何级数地上升。本篇我们将阐述如何缓存Flask的请求,并同时介绍一个缓存扩展,Flask-Cache。

Flask扩展系列(五)–MongoDB

MongoDB是一个文档型数据库,它灵活的Schema,多层次的数据结构和JSON格式的文档使得其已经成为了NoSQL阵营的领头羊。Flask的MongoDB扩展有很多,比如Flask-MongoAlchemy,基于MongoAlchemy实现,非常类似于上一篇所介绍的SQLAlchemy;Flask-MongoKit,基于MongoKit实现,同MongoAlchemy类似,需要预先定义数据模型。不过MongoDB的一大优势就是数据模型,即Collection,是灵活的,如果可以不限制数据模型的字段,将会更大程度的发挥MongoDB的优势,Python的PyMongo框架就可以做到这个。本篇我们就要介绍基于PyMongo实现的Flask扩展,Flask-PyMongo。

Flask扩展系列(四)–SQLAlchemy

熟悉Java的朋友们一定使用过Hibernate或MyBatis吧,这类的框架称为对象关系映射ORM框架,它将对数据库的操作从繁琐的SQL语言执行简化为对象的操作。Python中也有类似的ORM框架,叫SQLAlchemy。本篇我们将介绍Flask中支持SQLAlchemy框架的第三方扩展,Flask-SQLAlchemy。

Flask扩展系列(三)–国际化I18N和本地化L10N

在Jinja2系列中,我们曾经介绍过Jinja2模板的i18n扩展,它可以实现模板中内容的本地化翻译。这里,我们要介绍一个Flask扩展,Flask-Babel。它同Jinja2的i18n扩展一样,可以翻译Jinja2模板中的内容,以及Flask代码中的文字内容。同时它还可以翻译日期格式等等。它也是基于Babel和gettext等组件实现,有着非常简单友好的API接口,便于我们使用。