Server 端程序很多时候需要修改配置,这个时候如果重启服务就显得很不友好,代价也高。Nginx和Django,采用的是平滑启动.自动热更新,折腾的东西中遇到这样一个诉求,用python实现的话:

  1. 当修改配置后,通过对比py的修改时间,来推断该模块是否被修改过,从而reload指定模块就可以在不重启服务的情况下读取修改的配置,
  2. sys.module[‘modname’]返回的是该模块的pyc文件,而该文件是没有修改时间的,所以计算修改时间需要取py文件的属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import time
import sys, os
def auto_reload():
mods = ["test_config"]
for mod in mods:
try:
module = sys.modules[mod]
except:
continue
filename = module.__file__
print filename
if filename.endswith(".pyc"):
filename = filename.replace(".pyc", ".py")
mod_time = os.path.getmtime(filename)
if not "loadtime" in module.__dict__:
module.loadtime = 0 # first load's time 1*
try:
if mod_time > module.loadtime:
reload(module)
except:
pass
module.loadtime = mod_time # 2*

if __name__ == "__main__":
import time
import my_config
tmp = None
while True:
auto_reload()
if test_config.address != tmp:
print test_config.address
tmp = test_config.address
time.sleep(2)

test_config.py

1
address = "127.0.0.1"

昨晚参加腾讯周年晚会,同事在YY今晚的明星是孙燕姿,可惜最后没有如他所愿”遇见”女神.当晚应邀表演的是同为15周年生日的羽泉.对于从来没有参加过大型演唱会的小白来说,人生又圆满了一点。

在见到 ponyMa 等人时我并没有兴奋。反而是深居简入的 AllenZhang 张小龙,让我小激动了一把,大学时起对这样的孤胆极客有神秘的敬仰.张小龙很少在公众媒体前曝光,留给外界的事迹大概是单挑 foxmail,QQmail 之父,缔造微信神话,产品哲学大师。 这样一位爱在深夜听摇滚,烟瘾十足的中年老男人,看上去依然有很浓的技术宅风格,开玩笑时略显不自然的腼腆.微微的驼背。 越是神秘,外界越会过度解读。小龙哥说希望未来可以让大家去”月球上打飞机”… 我虽然坐在内场,但是终究是靠后,只好通过屏幕看清楚的.曾经在南方通讯大厦的期待见到却没能见到的人此时出现了, 低调的风格有深深的内涵。

话说回来,同事虽然没有如愿听到孙燕姿,我却貌似被条件反射地提醒,浮现在脑海的是《遇见》,回来之后凭着某种鸡血,开始搜索曲子练习,在写这篇文章的时候, 可以弹出来。连续五个周末加班,突然可以自己安排时间,甚是知足。弹起琴的时候会忘掉很多东西。工作的事情依旧例行化,比较杂比较琐碎,出于责任心和对心境的自我锻炼(至少我是如此认为),内心有两种声音:

  • 年轻人要有一种吃苦的态度,对于工作的事情不要挑三拣四
  • 年轻人应该勇敢去追求自己想要的东西,很明显我们愿意追求真善美与理想

对于前者,践行后发觉职场的厚黑学,日子过得很忙很累,收获是有的。迷茫的是,收获的东西可能不是你的初心,会怀疑是否有意义,往往抗拒的时候,是凭着意志去承受。

对于后者,除了幸运到一定的程度才可能在中国实现吧,于是成为很多人的向往。 可以看到不少倔强的人没有放弃,因为有着的这样的情怀,所以不少人会对 Allen 这样的人物很敬仰,同样的还有云风.韩寒

我们以某种莫名的执着与生活妥协着,却期待现实与理想可以在某个点遇见彼此。我试着用这种方式写下这篇碎语,不知道你们看懂了么?

来深圳已经四个多月了,我不会扯淡地说些恍如隔日,白驹过隙之云,就我真实的感受而言,这些日子发生了很多事情,感觉经历了不少事情。关键字是: MiniGame比赛,后苑生活,吉他,折腾捣鼓

本以为音乐会随着时光离我远去,原来它一直都在。小时候学过小提琴,后来因为羡慕同龄人可以一起踢球玩耍而渐渐荒废,每次面对房间里那把吉他心中不免有些愧疚,想拿起来练却因为种种原因作罢,归咎于我的无能吧。毕业前夕,邂逅吉他。开始新的音乐旅程.无数次的脱皮结茧也没有打消我的热情,疯狂爱上优美的弦音。虽不能说废寝忘食,却也可以每天自学一段时间,现在算是可以弹奏喜欢的歌曲。有一天当我教宿舍的朋友如何入门的时候,突然感觉自己已经在喜欢的路上走了一段距离。那时候看看手里的茧,听着手中指弹的发声,瞬间感动。这背后,是心性的变化。沉淀下来是可以做不少你曾经觉得甚是神奇的事情.

上善若水,水善利万物而不争。天下柔者莫过于水,而能攻者有莫过于水。
来深的这段时间里,我想这是我最大的收获。我喜欢这句话。

心态的变化体现在对技术折腾上。曾经在时间,任务,压力面前我总是妥协倾向更快速解决问题。这样,知其然不知其所以然的祸根就埋下了,也伴有一些焦急,“一件事情如果你说不好,十有八九你是做不好的”。当然我依然改变不了捣鼓研究的热情,转变的是,我更愿意以一种好奇求问的心态,想想他们适合怎样的场景,在允许的情况下,我很乐意探其究竟。从细节中去发现美。曾以为会花费不少时间,如今看来,倒是在效率上给我带来了很大的提高,思维上也改造了不少 :).这几天疯狂地满足了折腾的欲望

  • 折腾ArchLinux,
  • 阅读完一本《MongoDb权威指南》
  • 开发一个chrome插件,稍后会把经验分享给大家
  • 博客做了改版,也顺带理清了octopress的框架,给他加了不少插件。

捣鼓的热情,可以让人忘记时间甚至烦恼,沉浸在知识的海洋,也会为自己小小欣慰一把,这种小情绪怡然自得,如果你也是个不安分的人,相信你在此刻会有共鸣。

提起工作,必须承认,离开有2年半感情的Youmi,它有我大学一半的青春与回忆,对我来说是一个不容易的事情,我爱那里的人,初创团队的KISS,让我感受到很强的工程师文化,i like it。那里有我的可敬的精神偶像,但我希望我的人生多一些阅历,于是在毕业的岔口我来到了tx。选择没有对错,这一路总有不同的风景,

在大公司,不可避免,我做的是螺丝钉般很琐碎的工作,很诚实地说,基本无技术上的锻炼,很长一段时间也将是。这一直是我内心一个心结。这对热爱技术的我,算是一种无奈吧。只能靠自己更高效地工作争取会宿舍去捣鼓消化技术的热情,真的很羡慕那些工程师味道浓厚,真正做事,创造价值的团队,每每在微博看到业界意见领袖(@coolshell,@Fenng..)的团队,便会像阿Q一样自嘲下自己,也好,多些经历也是好事,这样我会更加鞭策着去努力。话说回来,无论光景怎么变,我能做的就是始终都不能放弃学习与积累。这个过程中本身就是一件很开心的事情。很欣喜的是这一路我并不孤单,华亮和我也是一样在努力着。

在平淡,甚至有点黯然失色的日子里,携安静的内心,还有吉他与代码,多一份坦然,多一份汗水,多一份坚持去面对生活,感悟生活,这是我对“上善若水”的理解。文字还是稚嫩,写这文章的心情是平静,不带偏激和情绪,我想和这段生活谈谈。

dotCloud 是一家具有伟大基因的公司,我认为的伟大是有着开源贡献的情怀,就像Amazon,Google等,而不是国内的某些巨头,虽然作为新兴的云服务提供商还不足以比肩巨头,致力于用技术解决公司的运营问题的同时也回馈社会,让我为之喝彩.我也有理由相信这样的公司会走的更远,因为他们有胸怀有远见,是否重视技术就更不言而喻了.

这篇文章旨在介绍由dotCloud开源的ZeroRpc,在dotcloud公司的基础服务得到很大应用,在阅读其manual之后更是被其简洁明了的使用方法所吸引

ZeroRPC is a modern communication layer for distributed systems built on top of ZeroMQ,

一直以来我一直喜欢python 的简洁,用过ZeroMQ做过网络通讯方面的编程,也使用RPC 做过远程过程调用,上次使用LevelDB的RPC是用python的[第三方库] (https://github.com/dotcloud/zerorpc-python)

这次刚好在Github上面看到这样的好玩意,便想与大家分享,ZeroRpc不仅仅支持代码层面的调用,也支持CLi, 这种设计本身就很有弹性.赞!

安装zerorpc

1
sudo pip install zerorpc 

在还没开始看demo之前
我们需要了解ZeroRpc是由三层架构组成:

官方的文档给出以下demo

####server.py #####

1
2
3
4
5
6
7
8
import zerorpc
class HelloRPC(object):
def hello(self, name):
return "Hello, %s" % name

s = zerorpc.Server(HelloRPC())
s.bind("tcp://0.0.0.0:4242")
s.run()

####client.py

1
2
3
4
5
import zerorpc

c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
print c.hello("RPC")

client也可用命令行代替

1
zerorpc tcp://127.0.0.1:4242 hello RPC

够简明易懂了吧
再来一个返回连续字节流的例子

####server.py

1
2
3
4
5
6
7
8
9
10
import zerorpc

class StreamingRPC(object):
@zerorpc.stream
def streaming_range(self, fr, to, step):
return xrange(fr, to, step)

s = zerorpc.Server(StreamingRPC())
s.bind("tcp://0.0.0.0:4242")
s.run()

####client.py

1
2
3
4
5
6
7
import zerorpc

c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")

for item in c.streaming_range(10, 20, 2):
print item

client也可用命令行代替,–json 表示头部是一个json对象

1
zerorpc tcp://127.0.0.1:4242 streaming_range 10 20 2 --json

Happy Hacking

0%