1
1
'''
2
2
simple Time base Task Scheduler
3
+
4
+ Author: shaoziyang
5
+ Date: 2021.2
6
+ Ver: 1.2
7
+
8
+ https://www.micropython.org.cn
9
+
3
10
'''
4
11
5
12
from micropython import const
9
16
10
17
class Task ():
11
18
12
- def __init__ (self , callback , param = None , interval = 1000 , state = TASK_RUN ):
19
+ def __init__ (self , callback , * param , interval = 1000 , state = TASK_RUN ):
13
20
self ._callback = callback
14
21
self ._param = param
15
- self ._cnt = 10
16
22
self ._intv = interval
17
23
self ._state = state
24
+ self ._cnt = 10
18
25
self ._rt = 0
19
26
20
27
def pause (self ):
@@ -24,10 +31,7 @@ def resume(self):
24
31
self ._state = TASK_RUN
25
32
26
33
def run (self ):
27
- if self ._param == None :
28
- self ._callback ()
29
- else :
30
- self ._callback (self ._param )
34
+ self ._callback (* self ._param )
31
35
32
36
class Scheduler ():
33
37
def __init__ (self , tm , interval = 100 , task_idle = None , task_err = None ):
@@ -55,12 +59,17 @@ def _run(self, task):
55
59
56
60
def scheduler (self ):
57
61
while True :
58
- for i in range (len (self ._tasks )):
59
- task = self ._tasks [i ]
60
- self ._run (task )
61
- if self ._task_idle :
62
- self ._task_idle ()
63
-
62
+ try :
63
+ for i in range (len (self ._tasks )):
64
+ task = self ._tasks [i ]
65
+ self ._run (task )
66
+ if self ._task_idle :
67
+ self ._task_idle ()
68
+ except KeyboardInterrupt :
69
+ return
70
+ except Exception as e :
71
+ print ('except {}' .format (e ))
72
+
64
73
def find (self , task ):
65
74
try :
66
75
return self ._tasks .index (task )
@@ -70,10 +79,13 @@ def find(self, task):
70
79
def clear (self ):
71
80
self ._tasks .clear ()
72
81
73
- def add (self , task ):
82
+ def add (self , task , stat = TASK_RUN ):
74
83
if self .find (task ) == None :
75
84
self ._tasks .append (task )
76
85
task ._cnt = task ._intv // self ._interval
86
+ print ('add task:' , task ._callback .__name__ )
87
+ if stat == TASK_STOP :
88
+ self .pause (task )
77
89
78
90
def delete (self , task ):
79
91
try :
@@ -93,3 +105,4 @@ def run(self, task):
93
105
if self .find (task ) != None :
94
106
task ._rt = task ._cnt
95
107
self ._run (task )
108
+
0 commit comments