Python event trigger mechanism and python trigger mechanism
The example in this article shares the code of the python Simulated Event trigger mechanism for your reference. The details are as follows:
EventManager. py
#-*-Encoding: UTF-8-*-# system module from queue import Queue, Emptyfrom threading import * class EventManager: def _ init _ (self ): "initialize event manager" # event object list self. _ eventQueue = Queue () # Switch event manager self. _ active = False # event processing thread self. _ thread = Thread (target = self. _ Run) # Here _ handlers is a dictionary used to save the corresponding Event Response Function # the value of each key is a list, the list stores the response function listening for this event, one-to-multiple self. _ handlers ={}# {event type: [event processing method]} def _ Run (self): "engine running" while self. _ active = True: try: # Set the event blocking time to 1 second event = self. _ eventQueue. get (block = True, timeout = 1) self. _ EventProcess (event) failed t Empty: pass def _ EventProcess (self, event ): "Processing event" # check whether there is a processing function if event that listens to this event. type _ in self. _ handlers: # If an event exists, the event is passed to the processing function in order to execute for handler in self. _ handlers [event. type _]: handler (event) def Start (self): "Start" "# Set event manager to Start self. _ active = True # Start the event processing thread self. _ thread. start () def Stop (self): "Stop" "# Set event manager to Stop self. _ active = False # Wait for the event processing thread to exit self. _ thread. join () def AddEventListener (self, type _, handler): "binding events and listener handler functions" "# try to obtain the handler list corresponding to this event type, if none, create try: handlerList = self. _ handlers [type _] handle T KeyError: handlerList = [] self. _ handlers [type _] = handlerList # if the processor to be registered is not in the processor list of the event, register the event if handler not in handlerList: handlerList. append (handler) def RemoveEventListener (self, type _, handler): "Remove listener handler" # The Reader tries to implement def SendEvent (self, event ): "Send events and store events in the event queue" self. _ eventQueue. put (event) "Event object" class event: def _ init _ (self, type _ = None): self. type _ = type _ # Event type self. dict = {}# the dictionary is used to save specific event data.
Test. py
#-*-Encoding: UTF-8-*-from threading import * from EventManager import * import time # event name new article EVENT_ARTICAL = "Event_Artical" # event source public account class PublicAccounts: def _ init _ (self, eventManager): self. _ eventManager = eventManager def WriteNewArtical (self): # event object, new article Event = event (type _ = EVENT_ARTICAL) event. dict ["artical"] = u'how to write more elegant code \ n' # Send event self. _ eventManager. sendEvent (event) print (u'send new article with public number') # Listener subscriber class Listener: def _ init _ (self, username): self. _ username = username # handler of the listener read the article def ReadArtical (self, event): print (u '% s received the new article' % self. _ username) print (U' reading new article content: % s' % event. dict ["artical"]) "test function" def test (): listner1 = Listener ("thinkroom") # subscriber 1 listner2 = Listener ("steve ") # subscriber 2 eventManager = EventManager () # bind event and listener response functions (new article) 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 ()
The above is all the content of this article. I hope it will be helpful for your learning and support for helping customers.