随笔分类 - Python

摘要:使用gdb调试Python进程有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump。例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢?这时就需要祭出gdb了。主要是三步:1)确保你的gdb版本>=72)安装pyt... 阅读全文
posted @ 2014-06-24 15:58 dkcndk 阅读(24884) 评论(1) 推荐(2) 编辑
摘要:command="/usr/local/sbin/xxx_cmd"os.popen(command)xxx_cmd是自己编译的二进制文件,如果不加上全路径/usr/local/sbin/的话在你的python 进程是通过service xxx start方式启动时os.popen(command)返回内容为空的,函数执行命令也无异常,很奇怪,暂不能解释,记录在案。 阅读全文
posted @ 2013-07-13 18:13 dkcndk 阅读(2036) 评论(0) 推荐(0) 编辑
摘要:这篇文章主要是对我收集的一些文章的摘要。因为已经有很多比我有才华的人写出了大量关于如何成为优秀Python程序员的好文章。我的总结主要集中在四个基本题目上:函数式编程,性能,测试,编码规范。如果一个程序员能将这四个方面的内容知识都吸收消化,那他/她不管怎样都会有巨大的收获。函数式编程命令式的编程风格已经成为事实上的标准。命令式编程的程序是由一些描述状态转变的语句组成。虽然有时候这种编程方式十分的有效,但有时也不尽如此(比如复杂性) —— 而且,相对于声明式编程方式,它可能会显得不是很直观。如果你不明白我究竟是在说什么,这很正常。这里有一些文章能让你脑袋开窍。但你要注意,这些文章有点像《骇客帝国 阅读全文
posted @ 2013-06-14 17:01 dkcndk 阅读(5937) 评论(1) 推荐(2) 编辑
摘要:Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。 改进算法,选择合适的数据结构 一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进。在算法的时间复杂度排序上依次是:O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) -> 阅读全文
posted @ 2013-06-14 16:48 dkcndk 阅读(2278) 评论(0) 推荐(0) 编辑
摘要:Pexpect 是一个用来启动子程序并对其进行自动控制的纯 Python 模块。 Pexpect 可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。继第一部分《探索 Pexpect,第 1 部分:剖析 Pexpect 》介绍了 Pexpect 的基础和如何使用后,本文将结合具体实例入手,详细介绍 Pexpect 的用法和在实际应用中的注意点。概述通过本系列第一部分《探索 Pexpect,第 1 部分:剖析 Pexpect 》(请参阅参考资料)的介绍,相信大家已经对 Pexpect 的用法已经有了比较全面的了解,知道 Pexpect 是个纯 Python 语言实 阅读全文
posted @ 2013-03-20 11:03 dkcndk 阅读(19469) 评论(0) 推荐(3) 编辑
摘要:由于Python的datetime和time中的_strptime方法不支持多线程,运行时会报错:import datetimeimport threadimport timedef f(): datetime.datetime.strptime("20100101","%Y%m%d")for _ in xrange(3): thread.start_new_thread(f, ())time.sleep(3)Unhandled exception in thread started by <function f at 0x2b52c24e66e0 阅读全文
posted @ 2012-12-31 13:54 dkcndk 阅读(1329) 评论(0) 推荐(0) 编辑
摘要:今天抽空学习python,对python的元组、列表、字典,参考地址:http://yangsq.iteye.com/blog/128508感觉python的函数用法挺灵活的,和c、php的用法不太一样,和js倒是挺像的。在照着操作时,我发现一个很神奇的现象:>>> t = (1, 3, 'b')>>> q = t + ((3, 'abc'))>>> q(1, 3, 'b', 3, 'abc')这里我预料的应该是(1, 3, 'b', (3, 'abc& 阅读全文
posted @ 2012-10-20 16:17 dkcndk 阅读(4730) 评论(0) 推荐(0) 编辑
摘要:首先要说的是python中的除法运算,在python 2.5版本中存在两种除法运算,即所谓的true除法和floor除法。当使用x/y形式进行除法运算时,如果x和y都是整形,那么运算的会对结果进行截取,取运算的整数部分,比如2/3的运算结果是0;如果x和y中有一个是浮点数,那么会进行所谓的true除法,比如2.0/3的结果是 0.66666666666666663。另外一种除法是采用x//y的形式,那么这里采用的是所谓floor除法,即得到不大于结果的最大整数值,这个运算时与操作数无关的。比如2//3的结果是0,-2//3的结果是-1,-2.0//3的结果是-1.0。 在未来的python 3 阅读全文
posted @ 2012-10-11 19:38 dkcndk 阅读(81818) 评论(0) 推荐(1) 编辑
摘要:加密算法: 对称加密算法: DES、IDEA、RC2、RC4、AES、Skipjack …… 非对称加密算法: RSA、DSA、DiffieHellman、PKCS、PGP …… 单向的HASH算法属于报文摘要算法,虽然有些也出自OpenSSL库。 命令操作: 1、生成普通私钥:[weigw@TEST src]$ openssl genrsa -out privatekey.key 1024Generating RSA private key, 1024 bit long modulus ....++++++ .......++++++ e is 65537 (0x10001) ... 阅读全文
posted @ 2012-09-13 11:30 dkcndk 阅读(2167) 评论(0) 推荐(0) 编辑
摘要:Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime。time模块我在之前的文章已经有所介绍,它提供的接口与C标准库time.h基本一致。相比于time模块,datetime模块的接口则更直观、更容易调用。今天就来讲讲datetime模块。 datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999。(对于偶等玩家,这个范围已经足够用矣~~) datetime模块定义了下面这几个类:datetime. 阅读全文
posted @ 2012-08-16 13:45 dkcndk 阅读(890) 评论(0) 推荐(0) 编辑
摘要:获取当前时间,并通过字符串输出。格式为:%Y-%m-%d %H:%M:%S'datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S' )获取当前时间,但只保留日期datetime.datetime.now().date()将字符串转换为datetime类型输入字符串格式为:'%Y-%m-%d'datetime.datetime.strptime(time,'%Y-%m-%d')print 'start at:',datetime.datetime.now().strftime 阅读全文
posted @ 2012-07-13 19:11 dkcndk 阅读(487) 评论(0) 推荐(0) 编辑
摘要:模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中。此类中的大部分函数都与对文件的操作方法类似。例:1#coding=gbk23importStringIO,cStringIO,sys45s=StringIO.StringIO("JGoodisahandsomeboy")6s.write("JGoodisahandsomeboy\r\n")7s.write('okkkk中国')8s.seek(0)9prints.read()1011#最后4个字节12s.seek(-4,2)13prints.read()1415#--- 阅读全文
posted @ 2012-06-21 11:24 dkcndk 阅读(2876) 评论(0) 推荐(0) 编辑
摘要:简介: Zookeeper (http://zookeeper.apache.org/)分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。具体简介可以参照这篇文章。zkpython的安装:python中有一个zkpython的包,是基于zookeeper的c-client开发的,所以安装的时候需要先安装zookeeper的c客户端。安装步骤如下:12345678910111213# 首先下载zookeeperwget http://labs.renren.co. 阅读全文
posted @ 2012-04-05 15:24 dkcndk 阅读(2732) 评论(0) 推荐(0) 编辑
摘要:Protobuf语言指南l定义一个消息(message)类型l标量值类型lOptional 的字段及默认值l枚举l使用其他消息类型l嵌套类型l更新一个消息类型l扩展l包(package)l定义服务(service)l选项(option)l生成访问类本指南描述了怎样使用protocolbuffer语言来构造你的protocol buffer数据,包括.proto文件语法以及怎样生成.proto文件的数据访问类。本文是一个参考指南——如果要查看如何使用本文中描述的多个特性的循序渐进的例子,请在http://code.google.com/intl/zh-CN/apis/protocolbuffer 阅读全文
posted @ 2012-03-27 09:32 dkcndk 阅读(122500) 评论(6) 推荐(19) 编辑
摘要:当前很多大型的web系统为了减轻数据库服务器负载,会采用memchached作为缓存系统以提高响应速度。目录:memchached简介hash取模一致性hash虚拟节点源码解析参考资料1. memchached简介memcached是一个开源的高性能分布式内存对象缓存系统。其实思想还是比较简单的,实现包括server端(memcached开源项目一般只单指server端)和client端两部分:server端本质是一个in-memory key-value store,通过在内存中维护一个大的hashmap用来存储小块的任意数据,对外通过统一的简单接口(memcached protocol)来 阅读全文
posted @ 2012-03-15 16:53 dkcndk 阅读(1822) 评论(1) 推荐(0) 编辑
摘要:Python 中的bisect用于操作排序的数组,比如你可以在向一个数组插入数据的同时进行排序。下面的代码演示了如何进行操作:import bisectimport randomrandom.seed(1)print('New pos contents')print('-----------------')l=[]for i in range(1,15): r=random.randint(1,100) position=bisect.bisect(l,r) bisect.insort(l,r) print '%3d %3d'%(r,positi 阅读全文
posted @ 2012-03-15 11:46 dkcndk 阅读(5025) 评论(0) 推荐(0) 编辑
摘要:python enumerate 用法 | 在for循环中得到计数参数为可遍历的变量,如 字符串,列表等; 返回值为enumerate类:import strings = string.ascii_lowercasee = enumerate(s)print sprint list(e)输出为:abcdefghij[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h' 阅读全文
posted @ 2012-03-15 11:35 dkcndk 阅读(522) 评论(0) 推荐(0) 编辑
摘要:http://www.cnblogs.com/Alexander-Lee/archive/2010/05/28/1745895.html 阅读全文
posted @ 2012-02-10 14:40 dkcndk 阅读(1921) 评论(0) 推荐(0) 编辑
摘要:ipython:1.安装easy_install工具wgethttp://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py2.安装ipythoneasy_install ipythonbpython: http://bpython-interpreter.org/downloads/1.安装easy_install工具wgethttp://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py2.安装bpythoneasy_install bpython 阅读全文
posted @ 2012-02-03 16:24 dkcndk 阅读(1751) 评论(0) 推荐(0) 编辑
摘要:dict1={1:[1,11,111],2:[2,22,222]}dict2={3:[3,33,333],4:[4,44,444]}合并两个字典得到类似{1:[1,11,111],2:[2,22,222],3:[3,33,333],4:[4,44,444]}方法1:dictMerged1=dict(dict1.items()+dict2.items())方法2:dictMerged2=dict(dict1, **dict2)方法2等同于:dictMerged=dict1.copy()dictMerged.update(dict2)或者dictMerged=dict(dict1)dictMerg 阅读全文
posted @ 2012-02-02 17:59 dkcndk 阅读(126651) 评论(3) 推荐(3) 编辑