基于 Python 生成器的 Tornado 协程异步

Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, 今天就简单介绍下 Tornado 协程实现原理, Tornado 的协程是基于 Python 的生成器实现的, 所以首先来回顾下生成器. 生成器 Python 的生成器可以保存执行状态 并在下次调用的时候恢复, 通过在函数体内使用 yield 关键字 来创建一个生成器, 通过内置函数...

comments

Tornado 多进程实现分析

引子 Tornado 是一个网络异步的的web开发框架, 并且可以利用多进程进行提高效率, 下面是创建一个多进程 tornado 程序的例子. #!/usr/bin/env python # -*- coding:utf-8 -*- import os import time import tornado.web import tornado.httpserver import tornado.ioloop import tornado.netutil import...

comments

发布一个基于Tornado的高效异步的HTTP客户端库

前面的博文提到过使用tornado进行网络异步编程, 也使用tornado实现了一个高效的WebQQ机器人, 由于tornado内置的AsyncHTTPClient功能过于单一, 所以自己写了一个基于Tornado的HTTP客户端库, 鉴于自己多处使用了这个库, 所以从项目中提取出来, 写成一个单独库 tornadohttpclient TornadoHTTPClient 是一个基于Tornado的高效的异步HTTP客户端库, 支持Cookie和代理,...

comments

clubot更新: 使用SQLAlchemy重写数据库部分和改用Tornado MainLoop

clubot在我的vps上跑了有一段时间了, 最近接触了SQLAlchemy 然后反观clubot的数据库代码部分, 感觉代码又遭有乱实在看不过眼, 所以就使用SQLAlchemy重写了数据库模块, 并将epoll的MainLoop改成仙子君所写的TornadoMainLoop 更新内容 数据库使用SQLAlchemy重写 MainLoop改用TornadoMainLoop 改变代码结构, 清理部分代码 将history命令改为old, 并支持时间查询 废弃一些不常用的命令...

comments

借用Tornado实现高效的WebQQ机器人

之前有写过一篇文章介绍使用Pyxmpp2桥接QQ和xmpp的文章(这里).后来我打算将WebQQ单独出来运行, 一开始直接拷贝了pyxmpp2的mainloop, 但是跑起来问题多多, 所以我又研究了利用Tornado进行网络编程(这里), 所以我放弃了Pyxmpp2的mainloop,使用Tornado进行重写 首先放出项目代码 引子 WebQQ协议是一套基于HTTP的QQ协议, 而用Python的urllib2库进行请求太慢, 因为HTTP本身就使用socket请求,...

comments

使用Tornado进行网络异步编程

Tornado Tornado 是一款非阻塞可扩展的使用Python编写的web服务器和Python Web框架, 可以使用Tornado编写Web程序并不依赖任何web服务器直接提供高效的web服务.所以Tornado不仅仅是一个web框架而且还是一款可以用于生产环境的高效的web服务器 Torando 在Linux和FreeBSD上使用高效的异步I/O模型 epoll 和kqueue来实现高效的web服务器, 所以 tornado在Linux上和FreeBSD系列性能可以达到最高...

comments

vLog 一个使用Python编写的轻量级博客系统

介绍 何为vLog 大家有人可能注意到博客改变了,是的前面也有文章提到从wordpress迁移到vlog,但是何为vLog这里给大家简要的说明一下,vLog是我使用Python的tornado框架和Jinja2模板引擎,基于MySQL数据的一个轻量级的博客系统,此系统功能比较薄弱,处于开发初期,使用Markdown的格式来抒写博文. 为什么vLog vLog后台十分简单(可以说是简陋),功能也简单,就是一款简单的博客系统,提供了Python终端脚本,可以在终端来抒写博文,...

comments

部署Tornado时iptables引发的的一个问题

今天在CentOS上部署了一个Tornado,使用nginx做代理, tornado使用8888,端口,使用nginx作为反向代理,配置文件如下: server { listen 80; server_name www.linuxzen.com; location / { proxy_pass_header Server; proxy_redirect off; proxy_set_header X-Real_IP $remote_addr; proxy_set_header...

comments