论坛首页 编程语言技术论坛

完善坛子工具库之--python版memcached遍历脚本

浏览 4032 次
精华帖 (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 ')
   发表时间:2008-10-22  
和ruby代码看起来差不多,要说差别,可能就是ruby非常喜欢用迭代器,而我看你的python代码里面没有迭代器。在没有迭代器的情况下,处理异常和保证释放资源方面,你一般怎么写?
0 请登录后投票
   发表时间:2008-10-22  
robbin 写道
和ruby代码看起来差不多,要说差别,可能就是ruby非常喜欢用迭代器,而我看你的python代码里面没有迭代器。在没有迭代器的情况下,处理异常和保证释放资源方面,你一般怎么写?


我这个代码确实没有考虑到异常,一般处理异常:
try:
   do something
except socke.error:
   do anothing


python 里一般都是直接for循环(不过俺的python水平应该还是在入门水平),不过python3000好像加入了这个特性。

ruby那段脚本给我最大的映象一个是迭代器,还有一个是end,由于python的强制缩进的特点,写出来的代码格式要求比较高,不过可以省去{}和begin end


0 请登录后投票
   发表时间:2008-12-24  
2.5 增加了一个 with
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics