随笔分类 -  python

摘要:thread 对外提供的常用方法有:start_new_thread:创建新线程e.g. 看下面的示例更容易理解thread的线程机制:import timeimport threadfrom time import ctimedef timer(i, interval): while True: print "id:%s, time:%s \n"%(i, ctime()) time.sleep(interval)def test(): for i in range(5): thread.start_new_thread(timer, (i... 阅读全文
posted @ 2013-06-13 15:40 践道者 阅读(275) 评论(0) 推荐(0)
摘要:def add(a, b): """ >>> add(1, 2) 3 >>> add([1], [2]) [1, 2] >>> add("1", "2") '12' """ return a + bif __name__ == "__main__": import doctest doctest.testmod()可以直接在命令行进行测试python-m doctest-v example.py 会输出详细 阅读全文
posted @ 2013-05-27 17:02 践道者 阅读(348) 评论(0) 推荐(0)
摘要:今天发现新版服务器的python import 不了httplib模块的HTTPSConnection类,进httplib看源代码发现加载HTTPSConnection的代码是这样的:try: import sslexcept ImportError: passelse: class HTTPSConnection(HTTPConnection):原来是没有ssl模块,经查实,python2.6版之后已经内置ssl模块,不用第三方模块方式安装,因此重新configure make && make install就行了,不影响以前安装的模块configure --with-ssl 阅读全文
posted @ 2013-05-21 09:40 践道者 阅读(473) 评论(0) 推荐(0)
摘要:#coding=utf8class A(object): def __init__(self, name): self.name = name def __eq__(self, obj): return self.name == obj.nameif __name__ == '__main__': a = A("Leon") b = A("Leon") print a == b__eq__ 定义了类的等号(==)行为 阅读全文
posted @ 2013-05-08 16:56 践道者 阅读(12487) 评论(0) 推荐(0)
摘要:#coding=utf8import sysdef test(): gf = sys._getframe print dir(gf()) print 'function name:',sys._getframe(1).f_code.co_name if sys._getframe(1).f_code.co_name != 'a': print 'Error' else: print 'Ok' def a(): test()def b(): test()class t(object): def a(self): ... 阅读全文
posted @ 2013-04-23 17:21 践道者 阅读(421) 评论(0) 推荐(0)
摘要:前几章一直是分析proxy.py的小函数,没有从总体看问题,现在回过头,先从主函数main开始逐步分析,def main(): global __file__ __file__ = os.path.abspath(__file__) if os.path.islink(__file__): #是否为符号链接,linux 下符号链接的命令是ln 应该相当于windows下的快捷方式吧 __file__ = getattr(os, 'readlink', lambda x: x)(__file__) #转换成真实链接地址 os.chdir(os.path.di... 阅读全文
posted @ 2013-04-16 15:10 践道者 阅读(787) 评论(0) 推荐(0)
摘要:class ProxyUtil(object): """ProxyUtil module, based on urllib2""" @staticmethod def parse_proxy(proxy): return urllib2._parse_proxy(proxy) @staticmethod def get_system_proxy(): proxies = urllib2.getproxies() return proxies.get('https') or proxies.get('http&# 阅读全文
posted @ 2013-04-16 13:55 践道者 阅读(668) 评论(0) 推荐(0)
摘要:class CertUtil(object): """CertUtil module, based on mitmproxy""" 来源:http://www.cnblogs.com/bjdxy/archive/2013/04/16/3023739.html ''' 数字证书生成类,由于涉及专业数字证书相关知识,因此不再详述 主要步骤是 1.从磁盘上的证书文件中读取证书数据 2.获取CertContext 3.获取证书信息 4.创建临时密钥容器 5.向容器中导入公钥,获取公钥句柄 6.导出公钥(最好采用二次调用 阅读全文
posted @ 2013-04-16 11:41 践道者 阅读(2635) 评论(3) 推荐(1)
摘要:class Logging(type(sys)): #继承自sys模块? ''' 定义相关类常量,目的作为日志等级标识 最严重为CRITICAL,最松为NOTSET ''' CRITICAL = 50 FATAL = CRITICAL ERROR = 40 WARNING = 30 WARN = WARNING INFO = 20 DEBUG = 10 NOTSET = 0 def __init__(self, *args, **kwargs): self.level = self.__class__.... 阅读全文
posted @ 2013-04-15 16:25 践道者 阅读(882) 评论(0) 推荐(0)
摘要:从96行开始,非常简单 #为了兼容,把相关gevent模块名增加进sys.modules里,为gevent创建相关子模块 gevent = GeventImport('gevent') gevent.pool = GeventImport('gevent.pool') gevent.queue = GeventImport('gevent.queue') gevent.coros = GeventImport('gevent.coros') gevent.server = GeventImport('gevent.serv 阅读全文
posted @ 2013-04-15 11:59 践道者 阅读(1310) 评论(0) 推荐(0)
摘要:从53行开始分析 1 def GeventImport(name): 2 ''' 3 本函数主要看type(sys)(name)的用法 4 意思是给sys对象生成name属性并加入到sys.modules字典中 5 以下是一个例子: 6 class A(object): 7 def __init__(self, name): 8 self.name = name 9 a = A("Jack")10 b = type(a)... 阅读全文
posted @ 2013-04-15 11:45 践道者 阅读(1319) 评论(0) 推荐(0)
摘要:逐句分析goagent源代码,罗嗦的文字就不说了,直接上代码,首先要分析的是最重要的文件proxy.py 前51行代码try: import gevent #gevent模块 import gevent.core import gevent.queue #异步队列 import gevent.coros #原始锁? import gevent.server #TCP/SSL server import gevent.monkey gevent.monkey.patch_all(dns=gevent.version_info[0] >= 1) #将所有... 阅读全文
posted @ 2013-04-15 10:54 践道者 阅读(2808) 评论(0) 推荐(0)
摘要:#coding=utf8import cStringIOimport StringIOimport timevalues = []items = ['1,2,31,2,31,2,31,2,3'] * 10000000#print itemsst = float(time.time())for i in items: values.append(i)news = ''.join(values)print len(news)print 'list append cost time:%s'%(float(time.time()) - st)strio 阅读全文
posted @ 2013-04-12 16:44 践道者 阅读(11384) 评论(0) 推荐(0)
摘要:#coding=utf8import sys, logginglogging.basicConfig(level=logging.INFO, format='levelname:%(levelname)s filename: %(filename)s ' 'outputNumber: [%(lineno)d] thread: %(threadName)s output msg: %(message)s' ' - %(asctime)s', date... 阅读全文
posted @ 2013-04-12 15:55 践道者 阅读(22857) 评论(0) 推荐(0)
摘要:sys.stderr 是用来重定向标准错误信息的,如import sysprint 'this error'sys.stderr.write("this is a error message")在linux 运行时python xx.py 2>/error.log由于命令行的2只有记录错误到文件,所以 error.log就会记录sys.stderr输出的错误信息,而不会记录print 的,当然也能记录到raise文件文件描述符输入文件0输出文件1错误输出文件2如goagent的proxy.py模块对sys.stderr的用法try: import ge 阅读全文
posted @ 2013-04-12 13:48 践道者 阅读(15229) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2013-04-11 17:44 践道者 阅读(193) 评论(0) 推荐(0)
摘要:import StringIO as SIOs1 = "Hello"print id(s1)s2 = "Hello" + s1print id(s2)sp = SIO.StringIO()sp.write("Hello")print sp.getvalue()print id(sp)sp.write("Leon")print sp.getvalue()print id(sp)exit()主要进行字符串数据缓存,以便循环利用 阅读全文
posted @ 2013-04-09 13:56 践道者 阅读(690) 评论(0) 推荐(0)
摘要:#coding=utf8tp = [(1,221,331),(2,222,332),(3,223,333), (4,224,334), (5,225,335),(6,226,336)]ids = [1,2,3,4,5,6]i_ids = [1,2,4]u_ids = [3,5,6]i_list, u_list = [],[]def generate(i_ids, u_ids, dataList): #flag:标识,1则mainIds为insert, 0则mainIds为update #dataList:数据列表 #i_ids:insert id 列表 #u_ids:u... 阅读全文
posted @ 2013-03-29 15:10 践道者 阅读(453) 评论(0) 推荐(0)
摘要:#coding=utf8def func1(count): for i in range(count): print i print i #4func1(5)def func2(count): def f(): for i in range(count): print i f() print i #抛错func2(5)python和js一样,应该是没有块级作用域的,可以用函数的函数来模拟块级作用域,以免变量过多造成数据污染。而js模拟块级作用域的方法是用函数表达式+括号:function outputFunc(co... 阅读全文
posted @ 2013-03-23 00:02 践道者 阅读(786) 评论(0) 推荐(0)
摘要:转自:http://www.redicecn.com/html/Python/20110507/273.htmlos.path.abspath(path)返回path规范化的绝对路径。>>> os.path.abspath('test.csv')'C:\\Python25\\test.csv'>>> os.path.abspath('c:\\test.csv')'c:\\test.csv'>>> os.path.abspath('../csv\\test.csv' 阅读全文
posted @ 2013-03-18 17:51 践道者 阅读(340) 评论(0) 推荐(0)