驅動python python實現事件驅動

2021-10-11 02:19:00 字數 3190 閱讀 6762

eventmanager事件管理類實現,大概就百來行**左右。

# 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:

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 = {} # 字典用於儲存具體的事件資料

測試**

# encoding: utf-8

import sys

from datetime import datetime

from threading import *

from eventmanager import *

#事件名稱 新文章

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)

#*** 訂閱者

class listener:

def __init__(self,username):

self.__username = username

#***的處理函式 讀文章

def readartical(self,event):

print(u'%s 收到新文章' % self.__username)

"""測試函式"""

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)

timer = timer(2, publicacc.writenewartical)

timer.start()

if __name__ == '__main__':

test()

驅動python Python資料驅動ddt

import ddt import unittest ddt模組包含了乙個類的裝飾器ddt和兩個方法的裝飾器 data 包含多個你想要傳給測試用例的引數 file data 會從json或yaml中載入資料 通常data中包含的每乙個值都會作為乙個單獨的引數傳給測試方法,如果這些值是用元組或者列表傳...

python python環境配置

python 3 教程 國內源 清華 https 阿里雲 http 中國科技大學 https 華中理工大學 http 山東理工大學 http 豆瓣 http 公升級 pip 到最新的版本 10.0 0 後進行配置 安裝django pip install django或 命令 yum install...

自學python python簡介

缺點 1.執行速度,有速度要求的話,用c 改寫關鍵部分吧。2.國內市場較小 國內以python來做主要開發的,目前只有一些web2.0公司 但時間推移,目前很多國內軟體公司,尤其是遊戲公司,也開始規模使用他。3.中文資料匱乏 好的python中文資料屈指可數 託社群的福,有幾本優秀的教材已經被翻譯了...