Redis优先列队 --cherryq,redis--cherryq,这个Queue是多列队列


这个Queue是多列队列队,在列队中实现了对新列队的加入,清空功能

也是一个简单使用消息列队原理和系统集成原理做的初步中间件。

#!/usr/bin/python2.7# -*- coding: utf-8 -*-"""__author__ = "Thomas"__date__ = "2013-05-19""""try:    import cPickle as pickleexcept:    import picklefrom cherryq import Queuefrom task import Taskimport timeimport signalimport loggingclass Worker:    def __init__(self, queue_instance):        self.queue = queue_instance        self.running = True        self.set_logging()        self.handle_signal()    def set_logging(self):        logging.basicConfig(filename='log/worker.log',                            filemode='a',                            format='[%(levelname)-5s %(asctime)s %(msecs)6dms]  %(message)s ',                            datefmt='%Y%m%d %H:%M:%S',                            level=logging.DEBUG)        self.logger = logging.getLogger(__name__)    def handle_signal(self):        for sig in (signal.SIGABRT, signal.SIGILL, signal.SIGINT, signal.SIGSEGV, signal.SIGTERM):            signal.signal(sig, self.stop_signal_do)    def stop_signal_do(self, sig, frm):        self.running = False    def work(self, queue_name):        while self.running:            data = self.queue.get(queue_name)            if data:                print data                job = pickle.loads(data[1])                job()                self.logger.info("(%s):%s" %(data[0], job.name))    def works(self, *queues):        while self.running:            data = self.queue.dequeue(queues, timeout = 2)            if data:                job = pickle.loads(data[1])                job()                self.logger.info("(%s):%s" %(data[0], job.name))                time.sleep(0.5)if __name__ == "__main__":    print "...worker starting...... "    q = Queue("demo_queues", host="localhost", db=0, port=6379)    queues = ["high", "meduim", "low"]    worker = Worker(q)    worker.works(*queues)    print "...worker exit........"#该片段来自于http://byrx.net

评论关闭