标签归档: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 … 继续阅读

发表在 Excellence Article | 标签为 , | 留下评论

使用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/ … 继续阅读

发表在 Excellence Article | 标签为 | 2 条评论

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’ … 继续阅读

发表在 Programming | 标签为 | 留下评论

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 – 过滤器处理次数,次数越多越模糊,当然处理过程也越慢 """   # … 继续阅读

发表在 Programming | 标签为 | 2 条评论

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 = … 继续阅读

发表在 Programming | 标签为 | 留下评论

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不成问题。 … 继续阅读

发表在 Programming | 标签为 | 留下评论

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): … 继续阅读

发表在 Programming | 标签为 | 留下评论

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 … 继续阅读

发表在 Excellence Article, Programming | 标签为 | 留下评论

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时间格式的问题

发表在 Programming | 标签为 | 留下评论

Python中给urllib2设置超时时间

import socket import urllib2   socket.setdefaulttimeout(seconds)   open = urllib2.urlopen("http://xxx.xxx.xxx") urllib2本身是没有办法设置超时时间的,示例中是通过socket.setdefaulttimeout() 设置了全局默认超时时间,从而给urllib2.urlopen()也设置了默认的超时时间

发表在 Programming | 标签为 | 留下评论