#/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-事件驱动模型代码的更多相关文章

  1. Python自动化之select、greenlet和gevent和事件驱动模型初探

    进程.线程和协程的区别 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 协程和线程一样 ...

  2. Python并发编程-事件驱动模型

     一.事件驱动模型介绍                                                                                         ...

  3. 从spring框架中的事件驱动模型出发,优化实际应用开发代码

    一.事件起源 相信很多人在使用spring框架进行开发时,都会遇到这样的需求:在spring启动后,立即加载部分资源(例如:spring启动后立刻加载资源初始化到redis中).当我去解决这个问题时发 ...

  4. python网络编程--事件驱动模型

    论事件驱动与异步IO 事件驱动模型:根据事件的触发去干什么事,就是根据一个事件做反应 原文:http://www.cnblogs.com/alex3714/articles/5248247.html常 ...

  5. Day14 - Python基础14 事件驱动模型、IO模型

    本节内容: 1:事件驱动模型 2:IO模型前戏准备 3:4种IO模型 1:事件驱动模型 传统的编程是如下线性模式的: 开始--->代码块A--->代码块B--->代码块C---> ...

  6. 35.python之事件驱动模型

    转载:https://www.cnblogs.com/yuanchenqi/articles/5722574.html 事件驱动模型 上节的问题: 协程:遇到IO操作就切换. 但什么时候切回去呢?怎么 ...

  7. python学习之-- 事件驱动模型

    目前主流的网络驱动模型:事件驱动模型 事件驱动模型:也属于生产者/消费者结构,通过一个队列,保存生产者触发的事件,队列另一头是一个循环从队列里不断的提取事件.大致流程如下:1:首先生成一个事件消息队列 ...

  8. python 常忘代码查询 和autohotkey补括号脚本和一些笔记和面试常见问题

    笔试一些注意点: --,23点43 今天做的京东笔试题目: 编程题目一定要先写变量取None的情况.今天就是因为没有写这个边界条件所以程序一直不对.以后要注意!!!!!!!!!!!!!!!!!!!!! ...

  9. (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本章我们讨论一个除前面的单例 ...

  10. 详解Spring事件驱动模型

    转载自:http://jinnianshilongnian.iteye.com/blog/1902886#comments 事件驱动模型简介 事件驱动模型也就是我们常说的观察者,或者发布-订阅模型:理 ...

随机推荐

  1. tableviewcell的取消选中,高亮

    1.取消多余cell的分割线 UIView *view = [UIView new]; view.backgroundColor = [UIColor clearColor]; [tableView ...

  2. WebService的原理和过程

    转自:http://blog.csdn.net/xiaoqiang081387/article/details/5694304 (一).XML WebService作用  XML WebService ...

  3. C#语法问答式总结

    传入某个属性的set方法的隐含参数的名称是什么?value,它的类型和属性所声名的类型相同. 如何在C#中实现继承?在类名后加上一个冒号,再加上基类的名称. C#支持多重继承么?不支持.可以用接口来实 ...

  4. linux下的文件权限管理

    权限管理有两个层面 第一层区分用户:文件属主(u), 组用户(g), 其它(o) 第二层区分权限:读(r),写(w),可执行(x) 这两个层次构成文件权限管理的二维结构 u         g     ...

  5. BZOJ 3163 Eden的新背包问题

    分治背包+单调队列优化. 但是为什么maxn要1w多?...不怎么懂. #include<iostream> #include<cstdio> #include<cstr ...

  6. BZOJ 1968 约数研究

    其实打个表就会发现,这个玩意儿是积性的,然后很happy的搞了一下. 不,不是这样. 考虑每个约数对答案的贡献,不难发现:约数i的贡献为n/i. 加之即可. #include<iostream& ...

  7. python3爬虫再探之豆瓣影评数据抓取

    一个关于豆瓣影评的爬虫,涉及:模拟登陆,翻页抓取.直接上代码: import re import time import requests import xlsxwriter from bs4 imp ...

  8. 【LeetCode OJ】Gas Station

    Problem link: http://oj.leetcode.com/problems/gas-station/ We can solve this problem by following al ...

  9. Testing the CATCHER_DP

    Description A military contractor for the Department of Defense has just completed a series of preli ...

  10. Java 集合深入理解(4):List<E> 接口

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 蓝瘦!香菇! 连着加班几天,醉了.学学 List 放松下! 在 Java 集合深入理解:Collection 中我们熟悉了 ...