- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python模拟事件触发机制详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例为大家分享了python模拟事件触发机制的具体代码,供大家参考,具体内容如下 。
EventManager.py 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# -*- encoding: UTF-8 -*-
# 系统模块
from
queue
import
Queue, Empty
from
threading
import
*
class
EventManager:
def
__init__(
self
):
"""初始化事件管理器"""
# 事件对象列表
self
.__eventQueue
=
Queue()
# 事件管理器开关
self
.__active
=
False
# 事件处理线程
self
.__thread
=
Thread(target
=
self
.__Run)
# 这里的__handlers是一个字典,用来保存对应的事件的响应函数
# 其中每个键对应的值是一个列表,列表中保存了对该事件监听的响应函数,一对多
self
.__handlers
=
{}
# {事件类型:[处理事件的方法]}
def
__Run(
self
):
"""引擎运行"""
while
self
.__active
=
=
True
:
try
:
# 获取事件的阻塞时间设为1秒
event
=
self
.__eventQueue.get(block
=
True
, timeout
=
1
)
self
.__EventProcess(event)
except
Empty:
pass
def
__EventProcess(
self
, event):
"""处理事件"""
# 检查是否存在对该事件进行监听的处理函数
if
event.type_
in
self
.__handlers:
# 若存在,则按顺序将事件传递给处理函数执行
for
handler
in
self
.__handlers[event.type_]:
handler(event)
def
Start(
self
):
"""启动"""
# 将事件管理器设为启动
self
.__active
=
True
# 启动事件处理线程
self
.__thread.start()
def
Stop(
self
):
"""停止"""
# 将事件管理器设为停止
self
.__active
=
False
# 等待事件处理线程退出
self
.__thread.join()
def
AddEventListener(
self
, type_, handler):
"""绑定事件和监听器处理函数"""
# 尝试获取该事件类型对应的处理函数列表,若无则创建
try
:
handlerList
=
self
.__handlers[type_]
except
KeyError:
handlerList
=
[]
self
.__handlers[type_]
=
handlerList
# 若要注册的处理器不在该事件的处理器列表中,则注册该事件
if
handler
not
in
handlerList:
handlerList.append(handler)
def
RemoveEventListener(
self
, type_, handler):
"""移除监听器的处理函数"""
#读者自己试着实现
def
SendEvent(
self
, event):
"""发送事件,向事件队列中存入事件"""
self
.__eventQueue.put(event)
"""事件对象"""
class
Event:
def
__init__(
self
, type_
=
None
):
self
.type_
=
type_
# 事件类型
self
.
dict
=
{}
# 字典用于保存具体的事件数据
|
test.py 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# -*- encoding: UTF-8 -*-
from
threading
import
*
from
EventManager
import
*
import
time
#事件名称 新文章
EVENT_ARTICAL
=
"Event_Artical"
#事件源 公众号
class
PublicAccounts:
def
__init__(
self
,eventManager):
self
.__eventManager
=
eventManager
def
WriteNewArtical(
self
):
#事件对象,写了新文章
event
=
Event(type_
=
EVENT_ARTICAL)
event.
dict
[
"artical"
]
=
u
'如何写出更优雅的代码\n'
#发送事件
self
.__eventManager.SendEvent(event)
print
(u
'公众号发送新文章'
)
#监听器 订阅者
class
Listener:
def
__init__(
self
,username):
self
.__username
=
username
#监听器的处理函数 读文章
def
ReadArtical(
self
,event):
print
(u
'%s 收到新文章'
%
self
.__username)
print
(u
'正在阅读新文章内容:%s'
%
event.
dict
[
"artical"
])
"""测试函数"""
def
test():
listner1
=
Listener(
"thinkroom"
)
#订阅者1
listner2
=
Listener(
"steve"
)
#订阅者2
eventManager
=
EventManager()
#绑定事件和监听器响应函数(新文章)
eventManager.AddEventListener(EVENT_ARTICAL, listner1.ReadArtical)
eventManager.AddEventListener(EVENT_ARTICAL, listner2.ReadArtical)
eventManager.Start()
publicAcc
=
PublicAccounts(eventManager)
while
True
:
publicAcc.WriteNewArtical()
time.sleep(
2
)
if
__name__
=
=
'__main__'
:
test()
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.cnblogs.com/gundan/archive/2018/01/18/8313396.html 。
最后此篇关于python模拟事件触发机制详解的文章就讲到这里了,如果你想了解更多关于python模拟事件触发机制详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这个问题已经有答案了: jQuery trigger click vs click ()? (3 个回答) 已关闭 5 年前。 我无法区分 trigger('click')与 trigger('cli
我正在运行 VS 2008 和 .NET 3.5 SP1。 我想在 HttpModule 中实现命中跟踪在我的 ASP.NET 应用程序中。很简单,我想。然而,BeginRequest我的事件 Htt
这是一段代码,我收到以下错误 #1064 - You have an error in your SQL syntax; check the manual that corresponds to yo
有没有办法用任意增量触发滚轮事件。就像 jQuery 对“点击”所做的那样: $('#selector').trigger('click'); 我需要类似的东西,只需一个滚轮即可: $('#selec
我正在尝试在配音数据库中触发时间。我想检查一下在不出现角色的电影配音中不能对角色进行配音。这是PDM: 和CDM 我是SQL的初学者,但我知道表“DUBBES”中应该有一些触发器。我试图做这样的事情,
这个问题已经有答案了: jquery programmatically click on new dom element (3 个回答) 已关闭 6 年前。 我有一个 jQuery 事件定义如下: $
主菜单的点击代码适用于类更改,但不适用于子菜单...当单击食物或鞋子等子菜单项时,它不会触发警报命令...事实上,悬停非常适合子菜单但不是活跃的 HTML
问题非常简单: $('#btn1').click(function(event){ alert( "pageX: " + event.pageX + "\npa
我使用 Spring 的调度程序 (@EnableScheduling) 并具有以下 @Scheduled 方法,该方法每分钟调用一次: @Component public class Schedul
错误 SQL 查询:文档 CREATE TRIGGER `triggers_div` AFTER INSERT ON `produits` FOR EACH ROW BEGIN INSERT INTO
我想在插入另一个表时填充表中的一些列值,并为特定列设置条件。我使用触发器: CREATE TRIGGER inserttrigger AFTER INSERT ON table1 FOR EACH R
我可以在 5.6 MySQL 环境中使用一些关于触发器的指导。我想创建一个触发器,如果发现具有相同速度的电脑的价格较低,则该触发器会停止更新。 架构是产品(制造商、型号、类型)PC(型号、速度、内
背景:我们有一个 completed_flag,默认为 0,当有人完成调查时更新为 1。我想记录这次更新发生的时间戳 在编写了这个触发器/函数以在标志从 0 触发到 1 时更新时间戳后,我怀疑我这样做
数据库中有两个表 KistStatus和 LastKistStatus .后者将保存 KistStatus 的所有“最新”值。 . KistStatus有大约 174.000 条记录,LastKist
我正在开发一个使用 APNS 的 iPhone 应用程序。我很清楚实现 APNS、创 build 备 token 的过程,等等等等……我不知道如何通过 Web 服务从提供商端触发和启动 APNS。任何
我有这个 javascript,当数量更改时会触发 update_cart... jQuery('div.woocommerce').on('change', '.qty', function
当我单击任何按钮时,click 事件不会被触发。艰难的是,我使用 $("div").on("click", "button", function () { 让它工作,但我想看到它使用 .class 工
如何在我的代码中触发 Android onCreateOptionsMenu 函数,即无需用户单击手机上的选项菜单按钮? 最佳答案 Activity.openOptionsMenu(); 就可以了 关
我将表单包装在 中然后我设置 list android:windowSoftInputMode="adjustResize" (默认 react native )。现在,当我用手指触摸事件手动聚焦一
我有一个 Android 编程问题。使用下面的代码我想验证一个字符串匹配。它验证正常,但 LogCat 显示 TextWatcher 方法在每次击键时触发两次,我不明白为什么。我希望每次击键只触发一次
我是一名优秀的程序员,十分优秀!