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

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

comments

Python 入门指南

引子 经常能在 Python 群里看到很多新人在问一些非常基础的问题, 基本每天都在重复的问这些问题, 在这里就总结一下这些问题. 首先声明, 本文不打算教会你 Python, 本文力图陈列一些新手容易遇到的问题, 并企图教会你 如何学习 Python, 在遇到问题的时候如何提问. 关于版本 学习 Python 的第一步需要选择版本, Python 3.x 和 2.x 的断层较大, 3.x 不向后兼容 2.x. Python 现在主流应该还是 Python 2.7, Python 2.7...

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

Linux 下 Python 实现按任意键退出

初学Python时在总想实现一个按任意键继续/退出的程序(受.bat毒害), 奈何一直写不出来, 最近学习Unix C时发现可以通过termios.h库来实现, 尝试一下发现Python也有这个库, 所以终于写出一个这样的程序. 下面是代码: #!/usr/bin/env python # -*- coding:utf-8 -*- import os import sys import termios def press_any_key_exit(msg): # 获取标准输入的描述符...

comments

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

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

comments

Pual 更新支持SimSimi可以进行互动

Pual 跑了许久, 通过一段时间的修改现在Pual主要支持以下功能: 英汉互译 为每个用户分配一个session的含有上下文的Python shell 贴代码 总而言之就是一个被动型的辅助机器人, 群里有同学建议AI功能, 但是我水平不够没办法设计和实现AI部分, 所以想调用SimSimi实现AI, 发现官方Key才免费7天, 我这等穷苦人如何是买不起key的, google发现有一个非官方API可以调用, 但是被封了.但咱不是个容易放弃的人, 经过一番折腾非官方API可以正常调用,...

comments

说说Python装饰器

装饰器对与Python新手以至于熟悉Python的人都是一个难理解, 难写的东西. 那么今天就分享一下我对Python 装饰器的理解 所谓装饰器仅仅是一种语法糖, 可作用的对象可以是函数也可以是类, 装饰器本身是一个函数, 其主要工作方式就是将被装饰的类或者函数当作参数传递给装饰器函数, 比如定义如下装饰器 import time def run_time(func): def wrapper(*args, **kwargs): start = time.time() r =...

comments

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

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

comments

SQLAlchemy MySQL数据库乱码解决

今天对clubot进行了升级, 但是导入数据后中文乱码, 一开是找资料说是在创建引擎的时候添加编码信息: engine = create_engine("mysql://root:@localhost:3306/clubot?charset=utf8") 但是这并不行, 然后查看表信息: > show create table clubot_members; clubot_members | CREATE TABLE `clubot_members` ( `id` int(11) NOT...

comments