Archive for the ‘python’ Category

python运算符与表达式

星期一, 三月 8th, 2010

1.1. 数值操作 所有数值类型都提供下列运算: 运算 描述 x + y 加 x – y 减 x * y 乘 x / y 常规除 x // y 地板除 x ** y 乘方 (xy ) x % y 取模 (x mod y ) -x 改变操作数的符号位 +x 什么也不做 ~x ~x=-(x+1)   关于常规除 / 与地板除 //: 地板除在任何时候都会将小数部分舍为0,而常规除的行为依操作数的类型而有不同。 常规除 / : 整数除以整数时 [...]

psyco 真的很神奇

星期六, 十二月 19th, 2009

测试代码 http://www.timestretch.com/FractalBenchmark.html#e7142f2f73f8eb4245f1b25aa6340470 没有使用 psyco 3.4 左右,生成 pyc 3.14 ,用了 psyco 0.34 真是太强大了, freebsd 安装 psyco cd /usr/ports/devel/py-psyco make install clean 开启 import psyco psyco.full()

freebsd下python程序打包工具 ── cx_Freeze

星期五, 十二月 4th, 2009

cx_Freeze是一个类似py2exe的工具,它们区别是py2exe是将python程序打包成windows下可以执行的exe文件的,而cx_Freeze则是将python程序打包为linux下可以直接执行的ELF格式的二进制可执行文件(看说明好像也能生成windows的可执行文件,号称跨平台)。 cx_Freeze的作用就是让你的python程序可以脱离python运行环境,在没有安装python的微型linux系统(例如cdlinux、tinycore等)里,方便地运行你的python程序。从功能上来说,也可以将其理解为一个python程序的编译器,将你的源码隐藏起来。 安装 cd /usr/ports/devel/cx_Freeze make install clean 打包程序 cxfreeze 你的程序文件.py –target-dir dist

Python date测试

星期五, 十二月 4th, 2009

import datetime, calendar   today = datetime.date.today() oneday = datetime.timedelta(days=1)   # loop back to most recent Friday (could be today) # takes care of end of month and even leap years   friday = today while friday.weekday() != calendar.FRIDAY: friday -=oneday   oneweek = datetime.timedelta(days=7) nextweek = today + oneweek nextyear = today.replace(year=today.year+1)   [...]

當Deferred遇上Thread

星期五, 十二月 4th, 2009

當Deferred遇上Thread Deferred不會自動實現將阻塞過程轉為非阻塞過程,雖然它已經有那樣的機制但還是要你去多走一步。要將阻塞過程轉為真正的非阻塞過程,那 只有借用線程。但至於線程調用你不用太擔心,twisted已為你準備好一個方便的用法。就是將Deferred綁在Thread上,這樣就有了deferToThread,味道不比牛奶加巧克力差。 deferToThread在twisted文檔的說明,洋墨水喝得比較少,就不照字面翻譯了。大概意思是將函數f放在線程裡並作為Deferred返回,args和kwargs是函數f的參數。也就是使用deferToThread返回的是一個帶線程的Deferred,並自動使用callback調用指定的函數f。相當於在線程中運行下面的代碼 d=defer.Deferred().addCallback(f) d.callback(result) def deferToThread(f, *args, **kwargs): (source) Run a function in a thread and return the result as a Deferred. Parameters f The function to call. *args positional arguments to pass to f. **kwargs keyword arguments to pass to f. Returns A Deferred which fires a callback with the result of f, [...]

Deferred筆記一

星期五, 十二月 4th, 2009

Deferred的簡單套路 從twisted的文檔入手,將Deferred獨立出來簡單的說明作用與使用方法,這樣更能快速對Deferred有深刻的了解。 一、學習資料 1、主要參考資料 官方文檔 http://twistedmatrix.com/projects/core/documentation/howto/deferredindepth.html 關聯譯文 http://wiki.woodpecker.org.cn/moin/twistedTUT00?action=AttachFile&do=get&target=deferred_tutorial.html(此鏈接將會下載離線文檔) 2、關聯資源 http://wiki.woodpecker.org.cn/moin/TwistedTUT 二、Deferred的作用 Deferred的主要作用可以用一句話比較形象說明,“不要打電話給我,我會打給你的(Don’t Call Us, We’ll Call You)”。相當於做好計劃後,執行交給Deferred,完成後再找我,我可要到一邊Happy去了。 它會根據callback運行結果(正常、發生例外)從callback鏈表中選擇執行已註冊的相應的callback函數,從而實現事件方式來驅動程序。 callback的運行不影響主程序的運行,Deferred.callback執行後馬上返回。(這點有待在後面證明) 三、Deferred實例 from twisted.internet import defer d=defer.Deferred() 實例化後就可以對Deferred進行操作。 四、callback鏈表 鏈表是用來放置callback函數,鏈表中的函數可以響應三類事件,正常結束、例外結束、任意(包括前面兩者),它們分別用addCallback、addErrback、addBoth註冊到鏈表中。也就是說函數正常結束返回調用addCallback註冊的函數,發生例外則調用addErrback註冊的函數,使用addBoth註冊的函數無論返回什 結果都會被調用。 五、callback函數註冊 除了上面提過的addCallback、addErrback、addBoth三個註冊函數外,還有另外一個addCallbacks可以同時註冊處理正常結束和例外結束的函數。 1 2 3 4 5 6 def deferredExample(): d = defer.Deferred() d.addCallback(failAtHandlingResult) d.addCallbacks(yesDecision, noDecisionPassthru) d.addCallback(handleResult) # – A – d.addErrback(handleFailure) 上面代碼中第4行的addCallbacks效果如同 d.addCallback(yesDecision) d.addErrback(noDecisionPassthru) 另外,我們也可以將註冊過程寫成下面形式。 d=refer.Deferred().addCallback(failAtHandlingResult).addCallbacks(yesDecision, [...]

Python 语法运用

星期四, 十二月 3rd, 2009

1. u=["a","b","c"] l = ["name=%s" % user for user in u ] 结果: ["name=a", "name=b","name=c"] l ={“a”:1,”b”:2,”c”:3} [k for k,v in l.items()] 结果: ["a","b","c"] l ={“a”:1,”b”:2,”c”:3} ["%s=%s" % (k,v) for k,v in l.items()] ["a=1","b=2","c=3"] 2.lambda lambda 是预代理,代替要生成方法的指针,我这样理解的 d.addCallback(lambda m: “status of %s : %s” % (msg,m)) d.addCallback(lambda m: self.msg(user,m)) 3.文件的操作 这是方指的是txt文件操作 # 注意路径只能是 / 的方式处理, [...]

python的dict,set,list,tuple应用

星期四, 十二月 3rd, 2009

字典(dict) dict 用 {} 包围 dict.keys(),dict.values(),dict.items() hash(obj)返回obj的哈希值,如果返回表示可以作为dict的key del 或 dict.pop可以删除一个item,clear清除所有的内容 sorted(dict)可以吧dict排序 dict.get()可以查找没存在的key,dict.[]不可以 dict.setdefault() 检查字典中是否含有某键。 如果字典中这个键存在,你可以取到它的值。 如果所找的键在字典中不存在,你可以给这个键赋默认值并返回此值。 {}.fromkeys()创建一个dict,例如: {}.fromkeys((‘love’, ‘honor’), True) =>{‘love’: True, ‘honor’: True} 不允许一个键对应多个值 键值必须是哈希的,用hash()测试 一个对象,如果实现_hash()_方法可以作为键值使用 集合(set) 集合是一个数学概念,用set()创建 set.add(),set.update.set.remove,添加更新删除,-= 可以做set减法 set.discard 和 set.remove不同在于如果删除的元素不在集合内,discard不报错,remove 报错 < >=表示超集 | 表示联合 & 表示交集 – 表示差集 ^ 差分集里啊 列表(list) 列表是序列对象,可包含任意的Python数据信息,如字符串、数字、列表、元组等。列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加、修改、删除等操作。可以通过list(seq)函数把一个序列类型转换成一个列表。 append(x) 在列表尾部追加单个对象x。使用多个参数会引起异常。 count(x) 返回对象x在列表中出现的次数。 extend(L) 将列表L中的表项添加到列表中。返回None。 Index(x) 返回列表中匹配对象x的第一个列表项的索引。无匹配元素时产生异常。 [...]

Deferred Object In Twisted

星期四, 十二月 3rd, 2009

Twisted uses the Deferred object to manage the callback sequence. The client application attaches a series of functions to the deferred to be called in order when the results of the asychronous request are available(this series of functions is known as a series of callbacks, or a callback chain), together with a series of functions [...]

Python 类型

星期四, 十二月 3rd, 2009

1.Dictionry {} 相录于一个 key value的内容 mys={“a”:1,”b”:2,”c”:3} mys["a"] = 1 mys.keys() mys.values() for k,v in mys.items(): print k,v 2.List 是一个列表 [] mys=["a","b",1] mys[0] mys[1] mys[-1] for v in mys: print v; 3. Tuple 一个不能改变的list () mys=(1,2,”a”) mys[0] mys[1] for v in mys: print v; 这三种类型可以完全结合 mys=[(2,3),(4,5),("a","b")] mys={“a”:[2,3,4],”b”:[3,4,5]} mys["a"].pop() 可以这样的写。

进程信号

星期一, 十一月 30th, 2009

转载:http://blog.csdn.net/ljx0305/archive/2008/09/09/2904056.aspx SIGHUP 终止进程 终端线路挂断 SIGINT 终止进程 中断进程 SIGQUIT 建立CORE文件终止进程,并且生成core文件 SIGILL 建立CORE文件 非法指令 SIGTRAP 建立CORE文件 跟踪自陷 SIGBUS 建立CORE文件 总线错误 SIGSEGV 建立CORE文件 段非法错误 SIGFPE 建立CORE文件 浮点异常 SIGIOT 建立CORE文件 执行I/O自陷 SIGKILL 终止进程 杀死进程 SIGPIPE 终止进程 向一个没有读进程的管道写数据 SIGALARM 终止进程 计时器到时 SIGTERM 终止进程 软件终止信号 SIGSTOP 停止进程 非终端来的停止信号 SIGTSTP 停止进程 终端来的停止信号 SIGCONT 忽略信号 继续执行一个停止的进程 SIGURG 忽略信号 I/O紧急信号 SIGIO 忽略信号 描述符上可以进行I/O SIGCHLD [...]

用Python写简单守护进程【转】

星期六, 十一月 28th, 2009

[转载自]http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ I’ve written a simple Python class for creating daemons on unix/linux systems. It was pieced together for various other examples, mostly corrections to various Python Cookbook articles and a couple of examples posted to the Python mailing lists. It has support for a pidfile to keep track of the process. I hope it’s useful [...]

Django and Memcached

星期六, 十一月 28th, 2009

just ran into several problems while setting up memcached for a django installation, that is replicated over several servers. One of the problems was the compiling of cmemcache, a python extension for libmemcache, where I received the following error: ‘CmemcacheObject’ has no member named ‘mc_ctxt’ First I didn’t realized the additional file, that resides at [...]

一个典型的Twisted应用程序框架

星期二, 十月 27th, 2009

一、简介 本文通过继承Twisted中的一些类实现了一个基本的Twisted应用程序,期间实现了协议、工厂并进行了服务器的监听,并将日志输出的屏幕。 二、基本框架 ·导入部分 这部分导入的内容是专供协议和工厂类使用的,其他部分的导入可能并不在同一模块当中,所以到了具体的代码部分再去导入。 from twisted.internet import protocol from twisted.protocols import basic ·协议 继承了一个LineReceiver,实现了行和原始两种方式的数据接收处理,还重载了连接的建立和断开事件。 class ConfigServer(basic.LineReceiver): def __init__(self): pass #by gashero def dataReceived(self,data): pass def lineReceived(self,line): pass def connectionMade(self): pass def connectionLost(self,reason): pass ·工厂 继承了一个服务器工厂, class ConfigServerFactory(protocol.ServerFactory): protocol=ConfigServer def __init__(self): pass def startFactory(self): pass def stopFactory(self): pass def buildProtocol(self,addr): protocol.ServerFactory.buildProtocol(self,addr) pass ·设置日志 from twisted.python [...]

twisted知识

星期五, 十月 23rd, 2009

一、Twisted基本模型 Twisted 网络编程框架是一种基于事件的网络编程框架,用户需要继承特定的类,并重载其中的方法来处理网络通信 中可能出现的各种情况。 Twisted的网络通信模型 最基本的也要由三部分组成:反应器(reactor)、协议(protocol)、工厂(factory)。 1、其中反应器reactor用来执行事件循环,分发事件处理等 等,每个应用程序中一般只能启动一个reactor。 2、协议用来完成与一个已经连接成功的主机的交互功能,主要有数据的接收和发送功能。连接的断开事件也可以在这 里处理。注意是在连接建立之后protacal才开始负责下面的工作的。 3、工厂负责与一个协议的启动和关闭功能,而且还负责在连接成功时生成一个协议对象,(by gashero)用于与远程主 机的交互功能。 一个典型的Twisted应用程序会建立至少一个协议,可以从twisted.internet.protocol.BaseProtocol类或其子类继承 。协议还需要实现数据的接收处理,即收到数据之后需要做出何种响应。比较简单的Twisted应用程序可以继承一个空 的工厂,来自 twisted.internet.protocol.Factory或其子类。工厂至少应该指定protocol属性,指向协议类。最后 就是要启动事件 循环,根据连接方向的不同,可以选择用reactor的connectXXX()或listenXXX()方法,然后执行 reactor.run()启动 事件循环。 二、协议模型 所有协议类的基类是 twisted.internet.protocol.BaseProtocol,但是一般使用其子类。不同的协议子类提供了不同 的数据接收方法,如 LineReceiver子类就允许同时使用行和原始数据两种方法接收数据,使用非常方便。 BaseProtocol的接口如下: class BaseProtocol: connected=0 #是否已经连接了 transport=None #用于数据发送的传输对象 def makeConnection(self,transport): #建立连接的方法,不是事件方法,一般不要重载 def connectionMade(self): #连接成功事件,可重载 可以看到BaseProtocol可以理解为一个虚基类,实现的功能十分简陋。实际的应用程序一般也不是直接继承BaseProtocol来实现协议,而是继承Protocol类。Protocol类提供了基本完善的协议功能,接口定义如下: class Protocol(BaseProtocol): def dataReceived(self,data): #接收到数据事件,可重载 def connectionLost(self,reason=connectionDone): #连接断开事件,可重载,依靠reason区分断开类型 从Protocol类继承就可以完成协议的基本处理了,包括连接的建立和断开事件,还有数据接收事件。 三、工厂模型 相对于协议,工厂可以发挥的空间就很小了。所有工厂的基类是twisted.internet.protocol.Factory。这个类定义了三个方法,接口如下: class Factory: protocol=None #指向一个协议类 [...]