
用yield实现生产者消费者,实时处理数据。纯练手
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import os,sys,time
#field = ['face', 'rece_bytes', 'rece_packets', 'rece_errs', 'rece_drop', 'rece_fifo', 'rece_frame', 'rece_compressed', 'rece_multicast', 'trans_bytes', 'trans_packets', 'trans_errs', 'trans_drop', 'trans_fifo', 'trans_colls', 'trans_carrier', 'trans_compressed']
field = ['face', 'rec_bt', 'rec_pkt', 'rec_errs', 'rec_drop', 'rec_fifo', 'rec_frame', 'rec_comp', 'rec_mult', 'trans_bt', 'trans_pkt', 'trans_errs', 'trans_drop', 'trans_fifo', 'trans_colls', 'trans_carr', 'trans_comp']
ds = False;
def openfile(zip_net_list):
#打开/proc/net/dev文件,获取网卡数据。2秒读取一次
while 1:
info = []
fi = open('/proc/net/dev','r')
i=0
for line in fi:
if line.find('eth0')!=-1:
line = line.replace(':','')
field = line.split()
if (len(field)<8):
continue
info.append(field)
i=i+1
fi.close()
zip_net_list.append( info[0] )
yield zip_net_list
time.sleep(2)
def subcri(list,list2):
#整理网卡数据
result={}
_len = len(field)
for i in range(_len):
if field[i]=='face':
result[field[i]] = list[i]
continue
elif field[i]=='rec_bt':
result[field[i]] = str(round((float(list2[i]) - float(list[i]))/1024, 2))+'kb'
elif field[i]=='trans_bt':
result[field[i]] = str(round((float(list2[i]) - float(list[i]))/1024, 2))+'kb'
else:
result[field[i]] = list2[i];
del result['rec_fifo']
del result['rec_mult']
del result['trans_colls']
del result['trans_carr']
return result;
def formats(data):
#格式化输出
da=[]
global ds
keys = sorted(data.keys())
if ds == False:
print '-'*140
print '|'.join([dd.ljust(10) for dd in keys])
ds=True
else:
print '-'*140
for i in keys:
da.append(data[i])
print '|'.join([d.ljust(10) for d in da])
def process(zip_net_list):
#调用yield,进行数据获取
p = openfile(zip_net_list)
while 1:
try:
p.next()
while len(zip_net_list)>1:
prev = zip_net_list.pop(0)
curr = zip_net_list[0]
formats(subcri(prev, curr))
except StopIteration:
sys.exit(0)
if __name__=='__main__':
zip_net_list=[]
process(zip_net_list)




近期评论