您的位置:首页 > 编程语言 > Python开发

python c/s模式下的内存监控模拟代码 推荐

2014-05-01 14:47 337 查看
对与服务端我们可以自己写些API供监控使用。
以下Code只是简单的给监控机吐出固定的mem值:80,不过,可以根据后期需要来开发相应的模块。此次我采用的是select来作为server端的socket监控,不过对与他的1024限制来说,我觉得仅作为监控服务端来说足够了,如果作为更大并发的server端话,可以使用poll,epoll,或者多线程并且结合队列来做到一定的限制,别让过多的连接把服务器干挂。

Server端
#!/usr/bin/env python
#Author:Badboy
#CreatBy:2014/5/1
import socket,select
host="192.168.1.61"
port=1001
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.setblocking(0)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((host,port))
sock.listen(1024)
inputs=[sock]
outputs=[]
addrs={}
debug=0
def get_free_mem():
return "80"
def send_data(sock,data):
if data.strip()=='mem':
sock.send(get_free_mem())
else:
sock.send("Error key words!")
while inputs:
rlist,wlist,elist=select.select(inputs,outputs,[],0)
for s in rlist:
if s == inputs[0]:
clientsock,clientaddr=s.accept()
inputs.append(clientsock)
addrs[clientsock]=clientaddr[0]
print "ClientAddr:",clientaddr[0]
if debug:
clientsock.send("Welcome here!\r\n")
else:
words=s.recv(1024)
if not words:
print "Byebye",addrs[s]
s.close()
inputs.remove(s)
del addrs[s]
if s in outputs:
outputs.remove(s)
continue
if s not in outputs:
outputs.append(s)
for s in wlist:
send_data(s,words)
outputs.remove(s)
Client
#!/usr/bin/env python
#Author Badboy
#CreatBy:2014/5/1
import socket,sys
mem_check="mem"
host="192.168.1.61"
port=1001
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((host,port))
sock.send(mem_check)
mem_warning=40
mem_critical=20
mem_size=sock.recv(1024)
if mem_size=="Error key words!":
print "Please check client!"
sys.exit(1)
mem_size=int(mem_size)
if mem_size > mem_warning:
print "Mem Size Ok!"
elif mem_size < mem_critical:
print "Mem Size Critical!"
else:
print "Mem Size Warning!"
以上仅是案例,大家可以在此基础上扩展修改的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python server client