ZMQ的初步学习

来源:互联网 发布:手机网络管理软件 编辑:程序博客网 时间:2024/06/06 09:26

ZMQ
ZMQ Community : http://zeromq.org/community
zguide:http://zguide.zeromq.org/page:all
pyzmq
pyzmq安装包:
https://pypi.python.org/pypi/pyzmq
pyzmq API: http://zeromq.github.io/pyzmq/
http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/#

Server端

#! /usr/bin/env python#coding=utf-8import timeimport zmqfrom zmq.eventloop import ioloop,zmqstreamimport jsonimport optionalSearchimport pymongoimport randomfrom threading import Threadfrom Queue import Queue"""ioloop.install() must be called prior to instantiating *any* tornado objects,and ideally before importing anything from tornado, just to be safe.install() sets the singleton instance of tornado.ioloop.IOLoop with zmq'sIOLoop. If this is not done properly, multiple IOLoop instances may becreated, which will have the effect of some subset of handlers never beingcalled, because only one loop will be running."""ioloop.install()import tornadoimport tornado.webport = "5556"queue = Queue(50)conn = pymongo.Connection("localhost",27017)db = conn.processMonitorsystemStatue = db.systemStatueclass Producer(Thread):    def run(self,):        global queue        context = zmq.Context()        socket = context.socket(zmq.REP)        socket.bind("tcp://*:%s" % port)        while True:            msg = socket.recv()            socket.send("from server:has recieved...")            systemInfo = json.loads(msg)            print type(systemInfo)            queue.put(systemInfo)            print "Produced..."            time.sleep(random.random())class Consumer(Thread):    def run(self,):        global queue,systemStatue        while True:            msg  = queue.get()            queue.task_done()            print "Consumed::",msg            #存储客户机监控信息            systemStatue.insert(msg)            #搜素算法(最优二叉查找树)            optionalSearch.monitorClientStatue(msg)            time.sleep(random.random())# def zmq_rep():#   """用于接收数据"""#   context = zmq.Context()#   socket = context.socket(zmq.REP)#   socket.bind("tcp://*:%s" % port)#   while True:#       msg = socket.recv()#       print msg#       socket.send("from server:has recieved...")if __name__ == '__main__':    #zmq_rep()    # worker = threading.Thread(target=zmq_rep)    # worker.start()    Producer().start()    Consumer().start()

客户端

#! /usr/bin/env python#coding=utf-8'''version:1.0监控windows信息:CPU占有率,内存占有率,端口开放情况,当前进程名称数据格式:   [{'IP':getIp(),'CPUstate':getCPUState(),'Memorystate':getMemoryState(),            'PortState':getPortState(),'ProcessName':getProcessName()},{},...]'''import timeimport zmqimport psutilimport socketimport jsonport = "5556"server_addr = "192.168.116.133"'''获取被监控客户机的基本状态'''class MachineStatue:    def _getHostName(self,):        self._hostname = socket.getfqdn(socket.gethostname())        return self._hostname    def _getIP(self,):        return socket.gethostbyname(self._hostname)    def _getCPUState(self, interval=1):        return psutil.cpu_percent(interval)    def _getProcessInfo(self,):        proc_pids = psutil.pids()        proc_name = []        for pid in proc_pids:            proc = psutil.Process(pid)            proc_name.append(proc.name())        return zip(proc_pids,proc_name)    def getInfo(self,):        hostname = self._getHostName()        ip = self._getIP()        CPUState = self._getCPUState()        processInfo = self._getProcessInfo()        info = {'hostname':hostname,'ip':ip,'CPUState':CPUState,'processInfo':processInfo}        return infodef main():    print 'begin'    machineStatue = MachineStatue()    context = zmq.Context()    req_socket = context.socket(zmq.REQ)    print req_socket    req_socket.connect("tcp://%s:%s"%(server_addr,port))    while True:        package = machineStatue.getInfo()        req_socket.send(json.dumps(package))        print "sending..."        rev_info = req_socket.recv(copy=False)        print rev_info        time.sleep(5)if __name__ == '__main__':    main()
0 0
原创粉丝点击