python
woshiaotian
点滴的积累,可以铸就未来。
QQ:346873803
EMAIL:346873803@qq.com
展开
-
聊聊时区,以及计算机中对时间的表示
参考资料:http://www.baike.com/wiki/GMT还是以python的文档来说明在python取当前时间可以使用time模块中的time()函数>>> import time>>> print time.time()1356849129.91>>> time.time() Return the time in seconds si原创 2012-12-30 15:03:16 · 1128 阅读 · 0 评论 -
python 模块==命名空间?
起因: 想利用模块传递某个变量,修改某个变量的值,且在其它模块中也可见 于是我做了这样一个实验: git@github.com:vearne/test_scope.gitbase.pyvalue = 10b.pyimport basedef hello(): print 'scope base', base.value, id(base.value)main.pyfrom base i原创 2015-07-13 15:03:09 · 1710 阅读 · 0 评论 -
python datetime类型和time类型互转
起因:写过好几次了,每次都记不住import timefrom datetime import datetimedef datetime2secs(mydate): ''' datetime.datetime 类型 到 自epoch 的秒数 ''' return time.mktime(mydate.timetuple())d = datetime(201原创 2015-06-25 12:49:32 · 1510 阅读 · 0 评论 -
happybase put()操作默认使用批量?
起因:前段时间,我们把通过happybase向hbase 写数据的操作put() 操作换成了batch() 结果发现性能并没有提升阅读代码,我发现put() 实现使用的就是批量插入 table.py def put(self, row, data, timestamp=None, wal=True): """Store data in the table. Th原创 2015-07-27 12:12:39 · 3824 阅读 · 0 评论 -
内存计数器实现限频
以分钟为单位计数,超过相应数值泽超频,很简单,不多解释import timeimport threadingclass Counter(object): def __init__(self): self.curr = 0 self.internal_dd = {} self.lock = threading.Lock() def in原创 2015-11-16 22:00:52 · 787 阅读 · 0 评论 -
利用redis实现分布式环境下的限频
redis 本身有计数器,并且可以做原子的增1操作,特别适合用来做分布式环境下的限频# coding:utf-8import timeimport threadingfrom redis import StrictRedisclass Counter(object): def __init__(self, redis_url): self.redis_client =原创 2016-03-30 13:53:52 · 1602 阅读 · 0 评论 -
peewee 对象clone函数
起因: 我需要得到peewee对象的clone对象,写个简单的小程序def clone(instance): obj = instance.__class__() # print a._meta.fields data = getattr(instance, "_data") for key in a._meta.fields: # print key原创 2016-10-20 14:23:21 · 496 阅读 · 0 评论 -
requests 库的另类用法(stream)
重要 我的博客从今天起开始陆续迁移到 http://vearne.cc 敬请关注 本文链接 http://vearne.cc/archives/120起因: 同事让我帮他抓取一批URL,并获取对应URL的标签中的文字,忽略对应URL网站的封禁问题,这个任务并不是一个特别麻烦的事情。然后实际跑起来,却发现流量打的很高,超过10Mb/s。经过排查发现,是因为很多URL,实际...原创 2017-01-23 13:22:05 · 1900 阅读 · 0 评论 -
tornado 数据库初始化
起因: 在使用tornado构建的web服务中,我们常常需要对数据库进行访问,如何数据连接才是最为友好的方式,我们一般写法可能是这样的db.pyclass DB(object): def __init__(self): self.mysql_db = MySQLDatabase(host=mysql_conf['host'], user=mysql_conf['usernam原创 2016-05-18 11:59:41 · 2812 阅读 · 0 评论 -
在一个Python脚本中加载2种不同版本的库
起因: 从ES集群A往ES集群B导数,然后比对2个ES的数据差异,逐个ID比对。由于ES集群A的版本是1.4.x,ES集群B的版本是5.3.x,所以无法使用同一个ES client包1. 加载不同版本的client包对比的过程是,取相同发布时间区间的文章ID,然后比对id的差异 伪码如下:es_A_ids = get_es_A_ids()es_B_ids = get_es_B_ids()dif原创 2017-06-13 11:12:43 · 2702 阅读 · 0 评论 -
业务日志收集方案
起因:我们线上的业务通常会部署到10几台或者几十台机器上,线上的日志如果用salt执行命令远程的grep已经是越来越不方便了,所以我们决定对日志进行统一收集,管理1. 选择方案我们业务日志不算特别的多,因此不想方案过于复杂,并且公司内部已经有ES和kafaka集群 因此可以选方案有 1) rsyslog + kafka + elasticsearch 2)fleuntd + kafka +原创 2017-11-09 13:29:55 · 4086 阅读 · 0 评论 -
celery常用配置总结
[html] view plaincopy# -*- coding:utf-8 -*-原创 2014-07-02 15:39:27 · 14991 阅读 · 1 评论 -
有趣的python 对象描述
在python 中可以自定义类, 类实例的描述信息可以有三个函数定义,对比java,我们会发现java只有一个toString()函数,这是因为在java虚拟机中所有的字符串都是unicode或者说utf-16。python 则提供更多了函数。那么在各种情况下,谁先被调用呢?参考http://docs.python.org/2/reference/datamodel.html#ob原创 2014-03-07 13:59:23 · 1324 阅读 · 0 评论 -
Delayqueue (python 实现)
起因:几年前为了开发一个监控系统,需要周期性的对系统状态进行检查,因此需要对检查任务进行添加,排队(按时间),移除等操作,无意中发现java jdk 中有DelayQueue,因此实现了一个python版本源码如下:# -*- coding:utf-8 -*-# python 版的 DelayQueue 类 和 Delayed 接口 # from Queue import PriorityQu原创 2015-07-07 13:24:51 · 2429 阅读 · 0 评论 -
python logging 最佳实践
起因我经常跟同事开玩笑,我说在一家公司里面,能把日志这个功能搞清楚的都没有几个。所以写篇文章把我知道的部分知识分享一下。 在我目前看到的日志的文档中,Python的官方的文章是最清晰明了,推荐大家都来阅读下 https://docs.python.org/2/howto/logging.html这个流程图非常重要,希望朋友们能仔细看看。 1. 适用场景1.1 一般场景在一般情况下,我们最常用的原创 2015-04-21 19:55:18 · 2985 阅读 · 2 评论 -
python对象转json字符串小工具
# -*- coding:utf-8 -*-from datetime import datetime# 用户自定义类 def obj2dict(obj): dd = {} # 展开它的属性 for m in dir(obj): if m[0] != "_" : value = getattr(obj, m)原创 2014-03-02 12:39:05 · 2530 阅读 · 0 评论 -
python--用户自定义类对象作为dict的key
PS: 学好了Java,学Python 会容易在Java 中如果 用户自定义的类要作为HashMap的key, 则这个类需要实现equals 和 hashCode ,在python 中也是相同的只不过相应的函数名称发生了变化,变为__hash__ 和__eq__ 参考http://docs.python.org/2/library/functions.html?highlight=ha原创 2014-03-02 12:55:37 · 10210 阅读 · 1 评论 -
定时任务调度总结1)
一、linux自带服务或shell 命令1. 大名鼎鼎的crontab crontab 作为linux自带的定时服务,能指定周期性的执行某些任务,或者在某天或者某周的特定时间执行某些任务,但是执行的精度是分钟2. watch 命令watch命令可以周期性的执行某个命令,并将结果显示在标准输出上一个常见的例子可以是1) 每隔3秒往/tmp/aa中写入一个字符串 ab原创 2014-04-02 22:46:27 · 1380 阅读 · 0 评论 -
一道穷举法算法题
题目是在topcoder看到的,但是不小心关了,不记得是题号了。题目如下:给定一组数,求哪这组数字能够组成的最长连续子序列,但其中比较特殊的是0可以代替任何数注意: 其中的数字可以重复限制条件:数字的返回是从 0 ~ 1000000 包含0, 1000000这组数的数量不超过 501) 0, 6, 5, 10, 3, 0, 11原创 2014-04-22 12:04:03 · 1347 阅读 · 0 评论 -
练习题(3) -- 另类的动态规划问题
已知1) 对于数字1 可以表达为 (1)2) 对于数字2 可以表达为 (1,1) (2)解释1 + 1 = 23) 对于数字3 可以表达为 (1,1,1) (1, 2) (2, 1) (3)1 + 1 + 1 = 31 + 2 = 32 + 1 = 3求对于数字N 所有表达项原创 2014-05-10 21:34:06 · 1044 阅读 · 0 评论 -
简单LRU cache 实现
起因:我的同事需要一个固定大小的cache,如果记录在cache中,直接从cache中读取,否则从数据库中读取。python的dict 是一个非常简单的cache,但是由于数据量很大,内存很可能增长的过大,因此需要限定记录数,并用LRU算法丢弃旧记录。key 是整型,value是10KB左右的python对象原创 2014-09-25 23:07:21 · 1016 阅读 · 0 评论 -
python 日志收集服务器
引因: python 的日志收集服务是线程安全的(对同一个文件的写入,使用了锁),但是对于多进程的情况,它是无法处理的。python 官方文档推荐的做法是,使用tcp 服务器专门用于日志的收集,以确保对的文件的写入是安全的。这里提供了日志收集服务器基于twisted的实现,可供参考,程序在centos上进行了测试,并可用于生产环境原创 2014-10-02 13:40:28 · 8000 阅读 · 0 评论 -
网上看到的计算python 月份增加的解决方法
感觉还不错,分享下。转载 2014-09-30 19:13:08 · 2616 阅读 · 0 评论 -
关于multiprocessing,我也来聊几句
起因:最近需要从hbase中向 ES中导一批数据,使用multiprocessing 启动多个程序同时向ES导数据,可以大大提高效率,因为导数的任务是可以按照时间分割的。令我十分不解的,multiprocessing 是如何实现任务的分发,以及结果的回传的。我希望能够把它的实现机制与操作系统的进程机制对应起来。经过阅读代码,得出的结论如下:1. 父进程作为整个任务的分发器,每个worker是一个子进程2. 子进程和父进程之间通过管道通讯,包括任务的分发和结果的回传(2个【管道】) ,管道通过【信号量原创 2014-10-03 12:12:42 · 2151 阅读 · 0 评论 -
使用logging模块来记录异常
使用logging模块来记录异常在使用Java的时候,用log4j记录异常很简单,只要把Exception对象传递给log.error方法就可以了,但是在Python中就不行了,如果直接传递异常对象给log.error,那么只会在log里面出现一行异常对象的值。在Python中正确的记录Log方式应该是这样的:?123转载 2015-02-02 00:57:59 · 3063 阅读 · 0 评论 -
python 也有析构函数, 我震惊了。
class Car(object): def __init__(self): print '---ok---' def __del__(self): print '----deconstrcut-------'c = Car()执行结果---ok-------deconstrcut-------这确实证明原创 2015-01-02 20:40:54 · 5869 阅读 · 0 评论 -
Python中执行外部命令并捕获双向输出
import subprocess#print ’popen3:’def external_cmd(cmd, msg_in=''): try: proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,原创 2015-04-21 20:03:10 · 1248 阅读 · 0 评论 -
python 使用multiprocessing需要注意的问题
重要 我的博客从今天起开始陆续迁移到 http://vearne.cc 敬请关注 本文新地址: http://vearne.cc/archives/166原创 2015-07-15 14:18:04 · 4644 阅读 · 0 评论