浏览 4027 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-22
最后修改:2009-01-09
今天看到robbin大哥用ruby写了一个遍历memcached的脚本,由于自己不用ruby就鳴发了用python也写一个的想法,说做就做,虽然功能上没有ruby版的强憾,不过也可以凑合用一下。 这个python版本还可以继续优化。代码如下: import socket, StringIO ''' @author: ahuaxuan @date: 2008-10-22 ''' class mcstats(object): def __init__(self, address, port): self.address = address self.port = port self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.s.connect((self.address, self.port)) def __del__(self): self.s.close() def connect(self, command): num = self.s.send(command) totalData = '' while True: data = self.s.recv(1024) if len(data) <= 0: break totalData = totalData + data if totalData.find('END') >= 0: break return totalData def calcSlabsCount(self, data): f = StringIO.StringIO(data) tmp = None for a in f: if a.find('END') >= 0: break else: tmp = a f.close() if tmp != None: return int(tmp.split(":")[1]) else: return 0 def showKVpairs(self, slabCounts, command): for a in range(0, slabCounts): tmpc = command + str(a + 1) + ' 0 \r\n' data = self.connect(tmpc) f = StringIO.StringIO(data) for b in f: if b.find('ITEM') >= 0: arr = b.split(' ') print 'key : ' + arr[1] + ' ------ value size : ' + arr[2][1:len(arr[2])] f.close() if __name__ == "__main__": mcs = mcstats("localhost", 11211) mcs.showKVpairs(mcs.calcSlabsCount(mcs.connect('stats items \r\n')), 'stats cachedump ') 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-22
和ruby代码看起来差不多,要说差别,可能就是ruby非常喜欢用迭代器,而我看你的python代码里面没有迭代器。在没有迭代器的情况下,处理异常和保证释放资源方面,你一般怎么写?
|
|
返回顶楼 | |
发表时间:2008-10-22
robbin 写道 和ruby代码看起来差不多,要说差别,可能就是ruby非常喜欢用迭代器,而我看你的python代码里面没有迭代器。在没有迭代器的情况下,处理异常和保证释放资源方面,你一般怎么写?
我这个代码确实没有考虑到异常,一般处理异常: try: do something except socke.error: do anothing python 里一般都是直接for循环(不过俺的python水平应该还是在入门水平),不过python3000好像加入了这个特性。 ruby那段脚本给我最大的映象一个是迭代器,还有一个是end,由于python的强制缩进的特点,写出来的代码格式要求比较高,不过可以省去{}和begin end |
|
返回顶楼 | |
发表时间:2008-12-24
2.5 增加了一个 with
|
|
返回顶楼 | |