Python-事件驱动模型代码
- #/usr/env/bin python
- '''
- this is document
- '''
- class Event(object):
- '''
- 事件初始化的一个方式
- '''
- def __init__(self,event_type,data=None):
- self._type = event_type
- self._data = data
- @property
- def type(self):
- return self._type
- @property
- def data(self):
- return self._data
- class EventDispatcher(object):
- """
- event分发类 监听和分发event事件
- """
- def __init__(self):
- #初始化事件
- self._events = dict()
- def __del__(self):
- self._events = None
- def has_listener(self,event_type,listener):
- if event_type in self._events.keys():
- return listener in self._events[event_type]
- else:
- return False
- def dispatch_event(self,event):
- """
- Dispatch an instance of Event class
- """
- # 分发event到所有关联的listener
- if event.type in self._events.keys():
- listeners = self._events[event.type]
- for listener in listeners:
- listener(event)
- def add_event_listener(self,event_type,listener):
- #给某种事件类型添加listner
- if not self.has_listener(event_type,listener):
- listeners = self._events.get(event_type,[])
- listeners.append(listener)
- self._events[event_type] = listeners
- def remove_event_listener(self,event_type,listener):
- if self.has_listener(event_type,listener):
- listeners = self._events[event_type]
- if len(listeners) == 1:
- del self._events[event_type]
- else:
- listeners.remove(listener)
- self._events[event_type] = listeners
- class MyEvent(Event):
- ASK = "askMyEvent"
- RESPOND = "respondMyEvent"
- class WhoAsk(object):
- def __init__(self,event_dispatcher):
- self.event_dispatcher = event_dispatcher
- self.event_dispatcher.add_event_listener(
- MyEvent.RESPOND,self.on_answer_event
- )
- def ask(self):
- print("who are listener to me?")
- self.event_dispatcher.dispatch_event(MyEvent(MyEvent.ASK,self))
- def on_answer_event(self,event):
- print("receive event %s",event.data)
- class WhoRespond(object):
- def __init__(self,event_dispatcher):
- self.event_dispatcher = event_dispatcher
- self.event_dispatcher.add_event_listener(MyEvent.ASK,self.on_ask_event)
- def on_ask_event(self,event):
- self.event_dispatcher.dispatch_event(MyEvent(MyEvent.RESPOND,self))
- dispatcher = EventDispatcher()
- who_ask = WhoAsk( dispatcher )
- who_responde1 = WhoRespond( dispatcher )
- who_responde2 = WhoRespond( dispatcher )
- # WhoAsk ask
- who_ask.ask()
转自:http://my.oschina.net/u/1462124/blog/477693
Python-事件驱动模型代码的更多相关文章
- Python自动化之select、greenlet和gevent和事件驱动模型初探
进程.线程和协程的区别 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 协程和线程一样 ...
- Python并发编程-事件驱动模型
一.事件驱动模型介绍 ...
- 从spring框架中的事件驱动模型出发,优化实际应用开发代码
一.事件起源 相信很多人在使用spring框架进行开发时,都会遇到这样的需求:在spring启动后,立即加载部分资源(例如:spring启动后立刻加载资源初始化到redis中).当我去解决这个问题时发 ...
- python网络编程--事件驱动模型
论事件驱动与异步IO 事件驱动模型:根据事件的触发去干什么事,就是根据一个事件做反应 原文:http://www.cnblogs.com/alex3714/articles/5248247.html常 ...
- Day14 - Python基础14 事件驱动模型、IO模型
本节内容: 1:事件驱动模型 2:IO模型前戏准备 3:4种IO模型 1:事件驱动模型 传统的编程是如下线性模式的: 开始--->代码块A--->代码块B--->代码块C---> ...
- 35.python之事件驱动模型
转载:https://www.cnblogs.com/yuanchenqi/articles/5722574.html 事件驱动模型 上节的问题: 协程:遇到IO操作就切换. 但什么时候切回去呢?怎么 ...
- python学习之-- 事件驱动模型
目前主流的网络驱动模型:事件驱动模型 事件驱动模型:也属于生产者/消费者结构,通过一个队列,保存生产者触发的事件,队列另一头是一个循环从队列里不断的提取事件.大致流程如下:1:首先生成一个事件消息队列 ...
- python 常忘代码查询 和autohotkey补括号脚本和一些笔记和面试常见问题
笔试一些注意点: --,23点43 今天做的京东笔试题目: 编程题目一定要先写变量取None的情况.今天就是因为没有写这个边界条件所以程序一直不对.以后要注意!!!!!!!!!!!!!!!!!!!!! ...
- (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本章我们讨论一个除前面的单例 ...
- 详解Spring事件驱动模型
转载自:http://jinnianshilongnian.iteye.com/blog/1902886#comments 事件驱动模型简介 事件驱动模型也就是我们常说的观察者,或者发布-订阅模型:理 ...
随机推荐
- hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案
我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...
- asp中cookie欺骗/注入原理与防范
一直以来sql注入被广泛关注,也有专门的防注系统代码.发现,如果代码不严谨也会有cookie欺骗/注入的情况.原来, 防注入系统没有注意到 Cookies 的问题!这里以ASP为例,分析一下cook ...
- 从对SAE的一次授权安全评估浅谈云安全
EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-12-20From: http://www.80sec.com/ [ 目录 ...
- Mousejack测试指南
0x00 前言 近日,Bastille的研究团队发现了一种针对蓝牙键盘鼠标的攻击,攻击者可以利用漏洞控制电脑操作,他们将此攻击命名为MouseJack. 攻击者仅需要在亚马逊上以60美元购买设备,改造 ...
- Moto G如何进入开发者选项
最近买了个Moto G做应用开发,突然发现开发者选项居然没有,搜索了一下发现是Google隐藏了此选项. http://allaboutmotog.com/moto-g-how-to-guide/ac ...
- Spring处理器
Spring容器内部工作机制 Spring的AbstractApplicationContext是ApplicationContext抽象实现类,该抽象类的refresh()方法定义了Spring容器 ...
- NSArray,NSSet,NSDictionary的遍历,基本使用集锦
NSArray *array = [NSArray arrayWithObjects:@"zhangsan",@"lisi",@"wangwu&quo ...
- jquery模拟淘宝购物车
今天要实现的一个功能页面就是利用jquery代码模拟一个淘宝网的购物车结算页面 总体页面效果如图: 首先我们要实现的内容的需求有如下几点: 1.在购物车页面中,当选中“全选”复选框时,所有商品前的复选 ...
- XML HttpRequest
XMLHttpRequest对象提供了在网页加载后与服务器进行通信的方法. 使用XMLHttpRequest对象,能够: 在不重新加载页面的情况下更新网页 在页面已加载后从服务器请求数据,接受数据 在 ...
- 如何给magento的产品页面添加返回按钮
如何给magento的产品页面添加返回按钮,最模板提供教程 第一步: 打开 E:\xampp\htdocs\magento\skin\frontend\default\bluescale\css\st ...