-
个人简介:
PHP开发者,高可用性、分布式集群实践者,伪Python、GAE开发者,伪Linux系统管理员,伪MySQL管理员
2009年8月至今服务于阿里巴巴云计算公司
2008年8月至2009年7月31日服务于博客大巴
-
归档
- 2012 年一月
- 2011 年十一月
- 2011 年九月
- 2011 年八月
- 2011 年七月
- 2011 年六月
- 2011 年五月
- 2011 年三月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年十月
- 2010 年九月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年四月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年四月
-
杂项
标签归档:Python
Python Web Server Gateway Interface v1.0.1 不完整翻译
Contents 简介 基本原理与目标 概述 应用接口 服务器接口 中间件 : 同时扮演两种角色的组件 详细说明 environ 变量 输入和错误流 start_response() 可调用者 Handling the Content-Length Header Buffering and Streaming Middleware Handling of Block Boundaries The write() Callable Unicode Issues Error Handling HTTP 1.1 Expect/Continue Other HTTP Features … 继续阅读
使用supervisor和nginx发布tornado程序
tornado先天对异步(no-bolocking)处理能力,非常适合作为Web服务。tornado在linux平台使用epoll来实现异步事件的处理,性能非常好。但是python做为一个脚步语言,单进程执行,无法利用多CPU,对当今的多核CPU是一个很大的浪费。为提高性能,提高CPU利用率,一般会将tornado程序允许cup*n个。 怎样才能放便启动多个tornado程序呢,我们可以用supervisor来管理多个tornado应用。supervisor安装非常方便,easy_install supervisord就可以。 以下是supervisor的配置,我在一台服务器上配置了四个tornado服务。 config ; supervisor. [group:gisapp] programs=gis-8001,gis-8002,gis-8003,gis-8004 [program:gis-8001] command=python /home/gis/gis/gisserver.py –port=8001 directory=/home/gis/gis/ autorestart=true redirect_stderr=true stdout_logfile=/home/gis/gis/logs/gis_server-8001.log stdout_logfile_maxbytes=500MB stdout_logfile_backups=50 stdout_capture_maxbytes=1MB stdout_events_enabled=false loglevel=warn [program:gis-8002] command=python /home/gis/gis/gisserver.py –port=8002 directory=/home/gis/gis/ autorestart=true redirect_stderr=true stdout_logfile=/home/gis/gis/gis_server-8002.log stdout_logfile_maxbytes=500MB stdout_logfile_backups=50 stdout_capture_maxbytes=1MB stdout_events_enabled=false loglevel=warn [program:gis-8003] command=python /home/gis/gis/gisserver.py –port=8003 directory=/home/gis/gis/ … 继续阅读
Python Web.py框架实现的简易REST服务原型
Web.py是python web框架中比较轻量级的,只实现了一些必要的组件,个人比较喜欢这样的框架,虽然功能并不完整,在我所做过的项目中,实际上并没有一款框架能够适合,或许是因为电子商务领域特殊性,也或许是因为公司太大,依赖的东西更多,直接导致了任何一款框架拿过来,写着写着就需要动框架本身的东西,不动它就实现不了业务,由于这个原因,我更偏爱简洁、轻量的框架,修改起来方便,至于组件,既然别的框架已经实现了,拿来改改就能用上了。当然,如果只是普通的CMS之类的开发,没有很多复杂的业务,我更推荐各位使用功能丰富,大而全的框架,比如Rails,比如Django,或者PHP里的很多类似的框架,可以省不少时间,至少分页类不用自己搞了。在复杂的项目中,这些时间是不能省的,否则会导致日后业务的灾难性后果或者需要更多的时间去修改框架。 废话多了,关于web.py可以参考官方网站,中文的入门文档也很全,写起来非常的简单,基本上不用改什么就可以迁移到Google App Engine上。下面上代码: import web import json from mimerender import mimerender render_xml = lambda message: ‘<message>%s</message>’%message render_json = lambda **args: json.dumps(args) render_html = lambda message: ‘<html><body>%s</body></html>’%message render_txt = lambda message: message urls = ( ‘/(.*)’, ‘greet’ … 继续阅读
Python PIL 生成带阴影的缩略图
iimport sys from PIL import Image, ImageFilter def dropShadow( image, offset=(5,5), background=0xffffff, shadow=0×444444, border=8, iterations=3): """ 把图像放在一个作了高斯模糊的背景上 image – 要放在背景上的原始图像 offset – 阴影相对图像的偏移,用(x,y)表示,可以为正数或者负数 background – 背景色 shadow – 阴影色 border – 图像边框,必须足够用来制作阴影模糊 iterations – 过滤器处理次数,次数越多越模糊,当然处理过程也越慢 """ # … 继续阅读
Python 批量生成缩略图
首先上代码 # coding=utf-8 import os import Image # 字义缩放百分比 rate = 40 # 缩略图命名,在后面加上 resizedAddone = ‘_resized’ # 支持格式 suportFormat = [’bmp’, ‘gif’, ‘jpg’, ‘png’] def process(arg, dirs, files): for file in files: fileExt = … 继续阅读
Httpsqs Python Client
Httpsqs 是张宴基于Tokyo Cabinet做的一个队列服务 前些日子项目中需要一个队列服务,因为配合Gearman做分发服务,因为之前的一些经历和教训,没有采用PHP作为脚本语言,当然并不是说PHP不行,只是懒得去折腾一些莫名其妙的问题,转而采用在更稳定更省心的Python做开发,之前其他的项目组中有使用Httpsqs的经历,我的leader强烈建议我使用这个,其实我更倾向memcacheQ 或者redis,Httpsqs没有Python版本的client,顺手写了一个,地址如下: http://code.google.com/p/httpsqs/source/browse/#svn%2Ftrunk%2Fclient%2Fpython 这个玩意是能正常的跑在我的项目中,不能保证能完全满足你的需求,如果你有任何建议或者意见,也欢迎联系我,特别附加一句:本人对此代码所带来的一切悲剧或者喜剧不承担任何责任,请慎重使用! 贴一段关于httpsqs的介绍,怕有些人不知道,知道的请忽略。 TTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。 项目网址:http://code.google.com/p/httpsqs/ 使用文档:http://blog.s135.com/httpsqs/ 使用环境:Linux(同时支持32位、64位操作系统,推荐使用64位操作系统) 软件作者:张宴 队列(Queue)又称先进先出表(First In First Out),即先进入队列的元素,先从队列中取出。加入元素的一头叫“队头”,取出元素的一头叫“队尾”。利用消息队列可以很好地异步处理数据传送和存储,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。 HTTPSQS 具有以下特征: ● 非常简单,基于 HTTP GET/POST 协议。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP协议的编程语言均可调用。 ● 非常快速,入队列、出队列速度超过10000次/秒。 ● 高并发,支持上万的并发连接,C10K不成问题。 … 继续阅读
Python Queue 的多线程(multi thread)死锁问题
废话不多说,先上代码: #encoding=utf-8 import threading import random import time from Queue import Queue import mutex class Producer(threading.Thread): def __init__(self, threadname, queue, lock): threading.Thread.__init__(self, name = threadname) self.sharedata = queue self.lock = lock def run(self): for i in range(20): … 继续阅读
python满足你需要的50个模块
Python具有强大的扩展能力,网上有人列出了50个很棒的Python模块,包含几乎所有的需要:比如Databases,GUIs,Images, Sound, OS interaction, Web,以及其他。推荐收藏。 Graphical interface wxPython http://wxpython.org Graphical interface pyGtk http://www.pygtk.org Graphical interface pyQT http://www.riverbankcomputing.co.uk/pyqt/ Graphical interface Pmw http://pmw.sourceforge.net/ Graphical interface Tkinter 3000 http://effbot.org/zone/wck.htm Graphical interface Tix http://tix.sourceforge.net/ Database MySQLdb http://sourceforge.net/projects/mysql-python Database PyGreSQL http://www.pygresql.org/ Database Gadfly http://gadfly.sourceforge.net/ Database SQLAlchemy http://www.sqlalchemy.org/ Database psycopg http://www.initd.org/pub/software/psycopg/ Database kinterbasdb http://kinterbasdb.sourceforge.net/ Database cx_Oracle http://www.cxtools.net/default.aspx?nav=downloads Database pySQLite http://initd.org/tracker/pysqlite … 继续阅读
Python解析iso8601时间格式获得时间戳
关于iso8601数据交换标准,请参见维基百科的解释,中文版不完全解释,参见为维基百科中文版 常见示例格式如下: 2010-11-21T00:00:00+08:00 真实的案例,请参见美团网的团购API Python默认安装包中不能对iso8601格式的时间戳,因此先安装这个解析包,下载地址:http://pypi.python.org/pypi/iso8601/ 如果你不能在网站上找到对应Python版本的模块,也可以通过输入easy_install iso8601试试,我的是2.6版本,安装成功 解析过程很简单,代码如下: import time import iso8601 dt = iso8601.parse_date(’2010-11-21T00:00:00+08:00′) timestamp = time.mktime(dt.timetuple()) PS:感谢妖怪帮助我解决解析iso8601时间格式的问题
Python中给urllib2设置超时时间
import socket import urllib2 socket.setdefaulttimeout(seconds) open = urllib2.urlopen("http://xxx.xxx.xxx") urllib2本身是没有办法设置超时时间的,示例中是通过socket.setdefaulttimeout() 设置了全局默认超时时间,从而给urllib2.urlopen()也设置了默认的超时时间