
Python
tinyid
Java/Python
Hadoop/Spark/Presto/Kafka/Druid
numpy/matplotlib/pandas/scipy
展开
-
Python的不定参数
以一个*开始的参数,代表一个任意长的元组:>>> def mul(*arg):... print arg... >>> mul(1,2,3,4,5,6,7,'hello','panfei')(1, 2, 3, 4, 5, 6, 7, 'hello', 'panfei') #一个元组>>>*********************************一个以**开始的参数,代表一个字典:>>> def mul2(**arg):... print arg... >>> mul2(a=11,b=原创 2011-02-11 12:22:00 · 9206 阅读 · 0 评论 -
利用virtualenv在Hadoop Streaming中使用完全个性化的Python解释器
在使用Python编写Hadoop Streaming作业的过程中,我们发现需要使用一些比较复杂的第三方库,比如numpy,scipy,scikit-learn,pandas等等。而这些库通过简单的zipimport机制又不能正常在工作节点上执行,主要原因是这些库中,有些是有C共享库依赖的。为了能够解决这个问题,最笨的办法就是,在所有的工作节点上都部署一套相同的Python解释器,并安原创 2016-03-01 14:24:08 · 4615 阅读 · 2 评论 -
使用Python接入银联支付和支付宝支付的实现
前置条件:需要安装Python的OpenSSL模块,我使用的版本是16.1.0,可以使用pip install pyopenssl来安装一、支付宝支付1. 使用RSA公钥加密系统进行签名和签名验证,需要自己生成一个RSA私钥和对应的一个RSA公钥(在Linux下可以使用ssh-keygen命令来生成),公钥需要上传至支付宝,供支付宝对开发者发送的请求做签名验证使用;而同时支付宝会提供一个R原创 2016-09-26 13:46:42 · 9663 阅读 · 0 评论 -
Python小技巧 2:列表项的推导式和过滤操作
典型代码1:data_list = [1, 2, 3, 4, 0, -1, -2, 6, 8, -9]data_list_copy = [item for item in data_list]print(data_list)print(data_list_copy)输出1:[1, 2, 3, 4, 0, -1, -2, 6, 8, -9][1, 2, 3, 4, 0, -1,原创 2016-10-19 17:55:28 · 2559 阅读 · 0 评论 -
Python小技巧 3:列表项的排序
典型代码1:data_list = [6, 9, 1, 3, 0, 10, 100, -100]data_list.sort()print(data_list)输出1:[-100, 0, 1, 3, 6, 9, 10, 100]典型代码2:data_list = [6, 9, 1, 3, 0, 10, 100, -100]data_list_copy = sorted(d原创 2016-10-24 13:53:18 · 5016 阅读 · 0 评论 -
Python小技巧 1:列表项的拼接
典型代码:data_list = ['a', 'b', 'c', 'd', 'e', 'f']separator = '\t'data_joined = separator.join(data_list)print(data_joined)其输出为:a b c d e f应用场景在实现很多业务需求的时候,需要将列表中的每一项按照某种分隔符拼接成一个串,以完成某种序原创 2016-10-15 10:26:05 · 5882 阅读 · 0 评论 -
Python小技巧 4:利用字典的默认行为
典型代码1:from collections import defaultdictif __name__ == '__main__': data = defaultdict(int) data[0] += 1 print(data)输出1:defaultdict(, {0: 1})典型代码2:if __name__ == '__main__': data = {'原创 2016-11-06 00:01:17 · 2903 阅读 · 0 评论 -
通过Python3.5来学习几种不同的IO模型
计算机的核心资源,基本上就是CPU和内存。我们下面的讨论可以假定CPU只有一个物理核心。从目前的情况看,CPU很快,IO很慢,即使是物理内存也很慢,否则就不需要CPU设置多层的高速cache了。CPU主要快在哪里?1、频率;2、指令执行效率,这里主要是硬件级别的指令分阶段并行优化。所以要充分利用CPU的指令来完成我们的计算任务。对于一个物理CPU来说,每时每刻只原创 2016-11-28 23:04:08 · 1726 阅读 · 0 评论 -
Python:从subprocess运行的子进程中实时获取输出
有些时候,我们需要将某些程序放到子进程中去运行,以达到整合系统的目的。在Python中,一个非常好的选择就是使用subprocess模块,本模块为开辟子进程去执行子程序提供了统一的接口,更加便于学习和使用。 同时,对于在子进程里的程序,我们希望能够实时获取其输出,以在主进程中打印相关信息,使我们能够了解当前子程序的执行进度。对此,subprocess模块也提供了相应的参数,能够将子程序的标...原创 2017-06-23 12:25:14 · 67816 阅读 · 11 评论 -
Python中使用threading.Event协调线程的运行
threading.Event机制类似于一个线程向其它多个线程发号施令的模式。原创 2014-11-05 14:03:52 · 22495 阅读 · 0 评论 -
uWSGI Preforking对比lazy-apps 和lazy
这是uWSGI项目有争议的选项之一。默认情况下,uWSGI会在第一个启动的进程中加载整个应用,并在加载完毕之后,会将自己多次fork()。这是常见的Unix模式,这能够显著降低应用的内存使用量,允许使用一些有趣的技巧,同时对于某些语言来说,这也会给你带来一些令人头疼的问题。虽然它的名字,uWSGI,来自于一个Perl应用服务器(但不叫uWSGI,也没有开源),在Perl的世界中,preforkin...翻译 2018-03-19 14:17:34 · 3897 阅读 · 1 评论 -
Python中使用threading.Condition交替打印两个字符的程序
这个程序涉及到两个线程的的协调问题,两个线程为了能够相互协调运行,必须持有一个共同的状态,通过这个状态来维护两个线程的执行,通过使用threading.Condition对象就能够完成两个线程之间的这种协调工作。threading.Condition默认情况下会通过持有一个ReentrantLock来协调线程之间的工作,所谓可重入锁,是只一个可以由一个线程递归获取的锁,此锁对象会维护当前锁的所...原创 2018-07-07 01:12:27 · 1772 阅读 · 0 评论 -
Python小技巧5:需要动态生成列表的时候,考虑使用生成器替代
典型代码:def mygen(): i = 0 while i < 100: yield i i += 1if __name__ == '__main__': gen = mygen() for item in gen: print(item)什么是生成器:生成器是一个包含yield表达式的函数,只要一个函...原创 2018-07-07 19:02:08 · 4478 阅读 · 0 评论 -
理解Python中的生成器
Python生成器是什么?先说一下生成器函数,抽象地说,生成器函数就是一个顺序执行过程的抽象。具体地说,它就是一种特殊的函数,这种特殊性源于这个函数中出现了一个yield关键字。解释器在发现函数中有yield关键字时,将这个函数标记为一个生成器函数,其执行的结果会返回一个生成器,而这个生成器是支持迭代器协议的。创建一个生成器函数生成器函数的创建是非常简单的:In [1]: def...原创 2019-05-15 23:26:10 · 330 阅读 · 0 评论 -
Python中的迭代器
以下是Python文档中对于迭代器类型的描述Python有一个在容器上进行迭代的概念。其实现需要两个方法来支持;这让用户自己定义的类也可以支持迭代。序列类型都支持迭代方法。容器对象需要提供一个方法来提供对于迭代的支持:container.__iter__():这个方法返回一个迭代器对象。这个对象必须支持后面所描述的迭代器协议。如果一个容器要支持不同类型的迭代,则可以提供额外的方法来专...原创 2019-06-18 20:04:30 · 1340 阅读 · 0 评论 -
Python3中使用零拷贝技术来提高网络文件传输时的系统吞吐量
首先,推荐一篇好文,这篇文章细致地描述了零拷贝技术的原理,以及其与传统拷贝过程的区别:http://www.linuxjournal.com/article/6345?page=0,0从总体上来简单总结一下零拷贝技术可以通过对比来理解:传统的拷贝过程大致是这样一个过程:1. 通过直接内存访问数据进入操作系统内核的缓存(数据拷贝到内核空间)——CPU将数据拷贝到用户空间—原创 2015-09-01 23:50:12 · 4776 阅读 · 0 评论 -
CentOS 6 64bit下,Python数据分析环境搭建
首先是基础环境安装:wget http://download.zeromq.org/zeromq-3.2.2.tar.gztar xvzf zeromq-3.2.2.tar.gzcd zeromq-3.2.2./configure && make && make installyum install gcc-gfortranyum install freetype-develyu原创 2013-04-11 09:58:25 · 5096 阅读 · 3 评论 -
使用朴素贝叶斯算法,通过用户安装的APP列表来推测用户的性别
从本质上来说,这是一个分类问题,类似于通过邮件内容来推测垃圾邮件,通过用户的相关信息来推测用户是否会拖欠贷款,而通过用户的APP安装列表来推测用户的性别也是一个类似的问题。对于贝叶斯算法来首,我们首先需要一个训练集数据,这个训练集是一个已经打好标签的数据。而要对一堆的数据打标签,人工来做是不太合适的,在这里需要结合人类与计算机各自的优势,来半自动化的识别出比较明显的有性别倾向的APP的原创 2015-07-31 14:54:46 · 11618 阅读 · 5 评论 -
Python的不定参数
以一个*开始的参数,代表一个任意长的元组:>>> def mul(*arg):... print arg... >>> mul(1,2,3,4,5,6,7,'hello','panfei')(1, 2, 3, 4, 5, 6, 7, 'hello',原创 2011-09-15 18:57:57 · 958 阅读 · 0 评论 -
Python元类
记住:元类就是类的模板。我要一大群的类都具有一中特点,我怎么给他们加上呢?模板模板吗,我从这个模板创建一群类不就OK了?那就需要元类了。定义一个元类(就所一个类的模板!莫多想,还要记住这是类级别的,不是对象级别的!):class MyMeta(type):... def __init__(cls,name,bases,dic):... print cls.__na...原创 2011-09-15 18:57:09 · 867 阅读 · 1 评论 -
Python使用mechanize模拟登录、抓取数据的代码
import mechanizeimport cookielibbr = mechanize.Browser()cj = cookielib.LWPCookieJar()br.set_cookiejar(cj)br.set_handle_equiv(True)br.set_handle_gzip(True)br.set_handle_redirect(True)br.set_h原创 2012-10-16 11:54:26 · 9613 阅读 · 2 评论 -
MoinMoin部署:Nginx+uwsgi
本文假设nginx,uwsgi都已经安装完毕!1. 首先安装flup,不多说,easy_install flup2. 下载moinmoin,我用的是1.9.5,解压到/data下,并做符号链接ln moin-1.9.5 moin -s3. cd /data/moin/wiki;4. cp server/moin.wsgi .5. cp config/wikiconfig原创 2012-10-23 17:12:21 · 4137 阅读 · 0 评论 -
使用Python通过Thrift接口访问HBase和Hive
HBase和Hive都提供了thrift服务,作为给其它非JVM语言访问的接口,其使用本身非常简单。以下是封装好的两个访问接口,数据最终被组织成一个列表,列表里的每个元素都是一个字典,这样元数据和数据放在一起,虽然占用的内存多了一些,但是使用起来方便了许多,并且从效果上也拉近了和关系数据库的距离,这点类似于MongoDB。如果要使用以下这两个工具类,必须首先将HBase和Hive对应的Thri原创 2013-03-21 16:10:04 · 3645 阅读 · 1 评论 -
结合Scribe/RabbitMQ/pika实现为Hive动态添加partition元数据
现有架构中通过Scribe直接向HDFS中写入数据,大部分的对数据的操作都是通过Hive来进行的,所以需要在数据进入HDFS之后就能通过Hive来访问到具体的数据,这就需要以数据驱动来添加元数据。以前使用的方式是通过按照固定的时间间隔来执行一个并行批量添加元数据的Java程序,不过那样做可能会漏掉一些没有过来的partition的添加,为此我们还必须在第二天再一次执行,确保所有的数据都被映射到了H原创 2013-04-25 11:15:41 · 1964 阅读 · 2 评论 -
Python tailer模块的使用
这是一个第三方库(https://github.com/six8/pytailer),它主要提供了三个功能函数:1. tail - 从文件的尾部读取数据2. head - 从文件的头部读取数据3. follow - 跟踪文件变化并读取增长的行安装的话很简单:easy_install tailer (or pip install tailer)使用[r原创 2013-05-22 10:40:04 · 5003 阅读 · 0 评论 -
通过Thrift source向Flume发送数据的Python实现
目前Flume支持Thrift source,即通过一个Thrift服务来收集数据(这一点和scribe是一样的),然后通过相应的channel发送到sink中去。以下是具体的实现过程:环境:Python 2.7.5/CDH4.3 Flume 1.3/Thrift 0.9/首先,我们需要一个Thrift协议的Python Flume客户端的模块,这个模块可以根据Thrift的定义自原创 2013-07-18 19:49:31 · 12376 阅读 · 2 评论 -
SaltStack Pillar攻略
这个攻略假设读者已经读过了基本的SaltStack攻略Salt中的pillar接口是Salt开发中最重要的接口之一。Pillar是用来产生特定于minions的任意数据的接口。pillar中产生的数据几乎可以在Salt的任何组件中使用,用途广泛:高度敏感的数据:通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,翻译 2013-10-15 14:12:58 · 13561 阅读 · 0 评论 -
PyDev安装之后却找不到
最近升级了Eclipse到Version: Kepler Service Release 2 Build id: 20140224-0627,之后安装Python开发huanji原创 2014-05-26 17:24:42 · 6938 阅读 · 0 评论 -
利用Pillow,几行代码实现的最简单的Django页面验证码功能
验证码本质上就是生成带有文字的图片,如果考虑到防止破解自然会涉及到许多复杂的算法,用以防止从图片中容易地识别出文字,作为一个简单的例子,以下就是利用Python的第三方图形处理模块Pillow来实现的一个简单的验证码功能:首先,在accounts.views中定义一个生成验证码的函数:from PIL import Image, ImageDraw, ImageFontfrom原创 2015-04-07 14:06:55 · 7884 阅读 · 0 评论 -
使用NLTK的朴素贝叶斯分类器来训练并完成分类工作
NLTK是Python的一个自然语言处理的模块,其中实现了朴素贝叶斯分类算法。以下,就使用上一篇文中提到的数据,来应用这个模块实现朴素贝叶斯分类。NLTK的实现更加泛化,所以在应用到我们的数据上时需要做一点的转化。首先来看一下NLTK官方文档中给出的一个简单明了的例子,在了解这个例子之后,再设法将同样的模型应用到自己的数据集上。官方给出的例子是英文名中,在知道名字中最后一个字母后,判断原创 2015-08-10 18:11:31 · 17197 阅读 · 2 评论 -
Python中的上下文管理器
Python中的上下文管理器,实际上就是实现了上下文管理协议的对象。在Python中打开文件的时候,我们需要确保文件被使用完毕之后,对其进行关闭操作——调用文件对象的close()方法。如果不使用上下文管理器,经典的处理方式就是将close()方法的调用放在一个finally语句中:f = open("www.log")try: print("do something with ...原创 2019-07-09 16:52:40 · 597 阅读 · 0 评论