Ejemplo n.º 1
0
class _QueueEventEngine(object):
    """
    计时器使用python线程的事件驱动引擎        
    """
    def __init__(self):
        """初始化事件引擎"""
        # 事件队列
        self._queue = Queue()
        self._active = False
        self._routes = {}
        self._thread = Thread(target=self._run)
        self._thread.daemon = True

    def start(self):
        """引擎启动"""
        #print self._routes
        self._active = True
        self._thread.start()

    def stop(self):
        """停止引擎"""
        self._active = False
        self._timer_active = False
        # 等待事件处理线程退出
        #self._thread.join()

    def register(self, route, handler):
        """注册事件处理函数监听,
          不重复注册同样事件的同样回调。
        """
        if route not in self._routes:
            self._routes[route] = [handler]
            return
        handlers = self._routes[route]
        if handler not in handlers:
            handlers.append(handler)

    def unregister(self, route, handler):
        """注销事件处理函数监听"""
        try:
            handlerList = self._routes[route]
            # 如果该函数存在于列表中,则移除
            if handler in handlerList:
                handlerList.remove(handler)
            # 如果函数列表为空,则从引擎中移除该事件类型
            if not handlerList:
                del self._routes[route]
        except KeyError:
            pass

    def emit(self, event):
        """向事件队列中存入事件"""
        self._queue.emit(event)

    def _run(self):
        """引擎运行"""
        while self._active == True:
            try:
                # 获取事件的阻塞时间设为1秒
                event = self._queue.get(block=True, timeout=1)
                self._process(event)
            except Empty:
                pass

    def _process(self, event):
        """处理事件"""
        if event.route in self._routes:
            for handler in self._routes[event.route]:
                try:
                    handler(event)
                except Exception as e:
                    print e
Ejemplo n.º 2
0
class _QueueEventEngine(object):
    """
    计时器使用python线程的事件驱动引擎        
    """
    def __init__(self):
        """初始化事件引擎"""
        # 事件队列
        self._queue = Queue()
        self._active = False
        self._routes = {}
        self._thread = Thread(target=self._run)
        self._thread.daemon = True

    def start(self):
        """引擎启动"""
        #print self._routes
        self._active = True
        self._thread.start()
    
    def stop(self):
        """停止引擎"""
        self._active = False
        self._timer_active = False
        # 等待事件处理线程退出
        #self._thread.join()
            
    def register(self, route, handler):
        """注册事件处理函数监听,
          不重复注册同样事件的同样回调。
        """
        if route not in self._routes:
            self._routes[route] = [handler]
            return
        handlers = self._routes[route]
        if handler not in handlers:
            handlers.append(handler) 

    def unregister(self, route, handler):
        """注销事件处理函数监听"""
        try:
            handlerList = self._routes[route]
            # 如果该函数存在于列表中,则移除
            if handler in handlerList:
                handlerList.remove(handler)
            # 如果函数列表为空,则从引擎中移除该事件类型
            if not handlerList:
                del self._routes[route]
        except KeyError:
            pass     
        
    def emit(self, event):
        """向事件队列中存入事件"""
        self._queue.emit(event)
        
    def _run(self):
        """引擎运行"""
        while self._active == True:
            try:
                # 获取事件的阻塞时间设为1秒
                event = self._queue.get(block=True, timeout=1)
                self._process(event)
            except Empty:
                pass
            
    def _process(self, event):
        """处理事件"""
        if event.route in self._routes:
            for handler in self._routes[event.route]:
                try:
                    handler(event)    
                except Exception as e:
                    print e