分类目录归档:Programming

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 | 标签为 | 留下评论

XAMPP集成环境中安装PHPUnit

PHPUnit是一个轻量级的PHP测试框架。它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计)。单元测试是几个现代敏捷开发方法的基础,使得PHPUnit成为许多大型PHP项目的关键工具。这个工具也可以被Xdebug扩展用来生成代码覆盖率报告 ,并且可以与phing集成来自动测试,最后它还可以和Selenium整合来完成大型的自动化集成测试。 Windows平台LAMP环境XAMPP 1.7.3下如何安装PHPUnit呢? 首先,以管理员身份运行cmd,使用pear添加phpunit频道: D:\xampp\php>pear channel-discover pear.phpunit.de Channel “pear.phpunit.de” is already initialized 频道添加好,尝试安装PHPUnit: D:\xampp\php>pear install phpunit/PHPUnit Unknown remote channel: pear.symfony-project.com Unknown remote channel: pear.symfony-project.com Unknown remote channel: components.ez.no Unknown remote channel: components.ez.no phpunit/PHPUnit requires PEAR Installer (version >= … 继续阅读

发表在 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 | 标签为 | 留下评论

python非贪婪、多行匹配正则表达式例子

一些regular的tips: 1 非贪婪flag >>> re.findall(r”a(\d+?)”, “a23b”) ['2'] >>> re.findall(r”a(\d+)”, “a23b”) ['23'] 注意比较这种情况: >>> re.findall(r”a(\d+)b”, “a23b”) ['23'] >>> re.findall(r”a(\d+?)b”, “a23b”) ['23'] 2 如果你要多行匹配,那么加上re.S和re.M标志 re.S:.将会匹配换行符,默认.不会匹配换行符 >>> re.findall(r”a(\d+)b.+a(\d+)b”, “a23b\na34b”) [] >>> re.findall(r”a(\d+)b.+a(\d+)b”, “a23b\na34b”, re.S) [('23', '34')] >>> re.M:^$标志将会匹配每一行,默认^和$只会匹配第一行 >>> re.findall(r”^a(\d+)b”, “a23b\na34b”) ['23'] >>> … 继续阅读

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