User Tools

Site Tools


module:python:taskevent:taskevent

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
module:python:taskevent:taskevent [2022/10/21 16:13] – [221021] omdevelopmodule:python:taskevent:taskevent [2022/10/21 19:49] (current) – [Übersicht] omdevelop
Line 1: Line 1:
 ====== Module - Python - TaskEvent ====== ====== Module - Python - TaskEvent ======
 +[[http://www.openhardsoftware.de/ | Open Hard- & Software]] 
 +
 +[[http://www.openhardsoftware.de/dokuwiki | DokuWiki]] 
 +[[http://www.openhardsoftware.de/websites | WebSites]] 
 +[[http://www.openhardsoftware.de/mediawiki | MediaWiki]] 
 +[[http://www.openhardsoftware.de/nextcloud | NextCloud]] 
 +]
 ===== Übersicht ===== ===== Übersicht =====
 +TaskAction durchläuft eine Schleife mit COUNT_ACTIONCYCLE-Durchgängen und wartet in jeder Schleife auf die Fertigstellung der Berechnung des Subtask TaskRefresh:
 +  * TaskAction: 
 +    * begin
 +    * Beginn Schleife: löscht den EventReady := 0
 +    * starten des Subtask: TaskRefresh
 +    * wartet auf das Ergebnis von TaskRefresh (warten auf: EventReady == 1 gesetzt)
 +  * TaskRefresh: 
 +    * begin
 +    * (NC löscht den EventReady := 0)
 +    * beginnt Berechnung...
 +    * setzt EventReady := 1 nach erfolgter Berechnung
 +    * end
 +
 +Download aktuelle Version: {{:module:python:taskevent:2210211928_taskevent_01v01.zip | 2210211928_TaskEvent_01V01.zip}}
 ===== ToDo ===== ===== ToDo =====
 +---
 ===== Done ===== ===== Done =====
 +==== 221021 ====
 +
 +Hauptprogramm:
 +<code>
 +#
 +import time as TIM
 +import threading as THR
 +#
 +import Task as TSK
 +#
 +#---------------------------------------------------------
 +# Constant
 +#---------------------------------------------------------
 +COUNT_ACTIONCYCLE = 3
 +#
 +#---------------------------------------------------------
 +# Field - Global
 +#---------------------------------------------------------
 +#---------------------------------------------------------
 +# Callback - Task - Refresh
 +#---------------------------------------------------------
 +def OnTaskRefreshStart(task):
 +    #print('OnTaskRefresh-Start[{0}]: begin'.format(task.ID))
 +    task.GetArguments()[0].clear()
 +    #print('OnTaskRefresh-Start[{0}]: end'.format(task.ID))
 +    return
 +def OnTaskRefreshAbort(task):
 +    #print('OnTaskRefresh-Abort[{0}]: begin'.format(task.ID))
 +    task.GetArguments()[0].set() # stop waiting on abort!
 +    #print('OnTaskRefresh-Abort[{0}]: end'.format(task.ID))
 +    return
 +def OnTaskRefreshExecute(task):
 +    #print('OnTaskRefresh-Execute[{0}]: begin'.format(task.ID))
 +    print('### TaskRefresh - Busy...')
 +    TIM.sleep(3.0)
 +    print('### TaskRefresh - SetEvent!')
 +    task.GetArguments()[0].set()
 +    #print('OnTaskRefresh-Execute[{0}]: end'.format(task.ID))
 +    return False
 +#---------------------------------------------------------
 +# Callback - Task - Action
 +#---------------------------------------------------------
 +def OnTaskActionStart(task):
 +    #print('OnTaskAction-Start[{0}]: begin'.format(task.ID))
 +    #print('OnTaskAction-Start[{0}]: end'.format(task.ID))
 +    return
 +def OnTaskActionAbort(task):
 +    #print('OnTaskAction-Abort[{0}]: begin'.format(task.ID))
 +    TaskRefresh.Abort()
 +    #print('OnTaskAction-Abort[{0}]: end'.format(task.ID))
 +    return
 +def OnTaskActionExecute(task):
 +    print('OnTaskAction-Execute[{0}]<{1}>: begin'.format(task.ID, task.GetCounter()))
 +    print('### TaskAction - Start Refresh and Wait for Event...')
 +    TaskRefresh.Start()
 +    task.GetArguments()[0].wait()
 +    print('### TaskAction - Refresh Finished (Event set)')
 +    #print('OnTaskAction-Execute[{0}]: end'.format(task.ID))
 +    return (task.GetCounter() <  COUNT_ACTIONCYCLE)
 +#---------------------------------------------------------
 +# Main
 +#---------------------------------------------------------
 +if ('__main__' == __name__):
 +    print('*** MainProgram-TaskEvent: begin')
 +    #
 +    EventReady = THR.Event()
 +    #
 +    TaskRefresh = TSK.CTask('TaskRefresh',
 +                            OnTaskRefreshStart,
 +                            OnTaskRefreshAbort,
 +                            OnTaskRefreshExecute,
 +                            (EventReady,))
 +    TaskAction = TSK.CTask('TaskAction',
 +                           OnTaskActionStart,
 +                           OnTaskActionAbort,
 +                           OnTaskActionExecute,
 +                           (EventReady,))
 +    TaskAction.Start()
 +    #
 +    print('*** MainProgram-TaskEvent: end')
 +    #
 +    #
 +#
 +#
 +</code>
 +
 +Ausgabe der Kommandozeile:
 +<code>
 +runfile('...TaskEvent.py', wdir='...2210211928_TaskEvent_01V01')
 +
 +*** MainProgram-TaskEvent: begin
 +OnTaskAction-Execute[TaskAction]<1>: begin
 +### TaskAction - Start Refresh and Wait for Event...
 +*** MainProgram-TaskEvent: end
 +### TaskRefresh - Busy...
 +### TaskRefresh - SetEvent!
 +### TaskAction - Refresh Finished (Event set)
 +OnTaskAction-Execute[TaskAction]<2>: begin
 +### TaskAction - Start Refresh and Wait for Event...
 +### TaskRefresh - Busy...
 +### TaskRefresh - SetEvent!
 +### TaskAction - Refresh Finished (Event set)
 +OnTaskAction-Execute[TaskAction]<3>: begin
 +### TaskAction - Start Refresh and Wait for Event...
 +### TaskRefresh - Busy...
 +### TaskRefresh - SetEvent!
 +### TaskAction - Refresh Finished (Event set)
 +</code>
 ==== 221021 ==== ==== 221021 ====
   * Aufbau der Event-Library, Basis Python:    * Aufbau der Event-Library, Basis Python: 
     * import threading     * import threading
     * e = threading.Event()     * e = threading.Event()
 +  * Neu: Argument-Übergabe (hier Event) an Threads!
   * [[https://www.bogotobogo.com/python/Multithread/python_multithreading_Event_Objects_between_Threads.php | MULTITHREADING - EVENT OBJECTS BETWEEN THREADS]]   * [[https://www.bogotobogo.com/python/Multithread/python_multithreading_Event_Objects_between_Threads.php | MULTITHREADING - EVENT OBJECTS BETWEEN THREADS]]
 +  * Verbesserung der CTask-Library mit Argument-Übergabe, Counter, OnExecute -> Result
 +  * Neue Klasse: CTask  
 +  * Direkte Klasse: threading-Event
 +
 +-----
 +[[http://www.openhardsoftware.de/ | Open Hard- & Software]]
 +[
 +[[http://www.openhardsoftware.de/dokuwiki | DokuWiki]]
 +[[http://www.openhardsoftware.de/websites | WebSites]]
 +[[http://www.openhardsoftware.de/mediawiki | MediaWiki]]
 +[[http://www.openhardsoftware.de/nextcloud | NextCloud]]
 +]
 +
 +
module/python/taskevent/taskevent.1666361631.txt.gz · Last modified: 2022/10/21 16:13 by omdevelop