1
2
3
4
5
6
7
8
10
11 - def __init__(self, planificador, time_out, dt, funcion, parametros, una_vez):
12 """Representa una tarea que se puede ejecutar dentro del planificador.
13
14 :param time_out: El tiempo absoluto para ejecutar la tarea.
15 :param dt: La frecuencia de ejecución.
16 :param funcion: La funcion a invocar.
17 :param parametros: Una lista de argumentos para la funcion anterior.
18 :param una_vez: Indica si la funcion se tiene que ejecutar una sola vez.
19 """
20
21 self.planificador = planificador
22 self.time_out = time_out
23 self.dt = dt
24 self.funcion = funcion
25 self.parametros = parametros
26 self.una_vez = una_vez
27
29 "Ejecuta la tarea."
30 return self.funcion(*self.parametros)
31
33 "Quita la tarea del planificador para que no se vuelva a ejecutar."
34 self.planificador.eliminar_tarea(self)
35
37 "Termina la tarea (alias de eliminar)."
38 self.eliminar()
39
41 """Representa una tarea similar a Tarea, pero que solo se ejecuta si El
42 retorno de la función a ejecutar devuelve True.
43 """
44
46 """Ejecuta la tarea, y se detiene si no revuelve True."""
47 retorno = Tarea.ejecutar(self)
48
49 if not retorno:
50 self.una_vez = True
51
53 """Contenedor de tareas a ejecutar por tiempo.
54
55 El Tareas es un planificador de tareas, permite que
56 podamos ejecutar funciones y métodos luego de transcurrido
57 el tiempo que queramos.
58
59 Por ejemplo, si se quiere que el planificardor ejecute
60 una función dentro de dos segundos podemos escribir:
61
62 >>> pilas.mundo.agregar_tarea(2, hola)
63
64 o bien, especificando argumentos para esa función:
65
66 >>> pilas.mundo.agregar_tarea(4, hola, 'persona')
67
68 La función que se especifique como segundo argumento
69 tiene que retornar True o False. Si retorna True será
70 colocada nuevamente en la cola de tareas una vez que se
71 ejecute (esto es útil para crear bucles).
72 """
73
75 "Inicializa el gestor de tareas."
76 self.tareas_planificadas = []
77 self.contador_de_tiempo = 0
78
80 """Retora la cantidad de tareas planificadas."""
81 return len(self.tareas_planificadas)
82
84 """Actualiza los contadores de tiempo y ejecuta las tareas pendientes.
85
86 :param dt: Tiempo transcurrido desde la anterior llamada.
87 """
88 self.contador_de_tiempo += dt
89 tareas_a_eliminar = []
90
91 for tarea in self.tareas_planificadas:
92 if self.contador_de_tiempo > tarea.time_out:
93 tarea.ejecutar()
94
95 if tarea.una_vez:
96 tareas_a_eliminar.append(tarea)
97 else:
98 w = self.contador_de_tiempo - tarea.time_out
99 parte_entera = int((w)/float(tarea.dt))
100 resto = w - (parte_entera * tarea.dt)
101
102 for x in range(parte_entera):
103 tarea.ejecutar()
104
105 tarea.time_out += tarea.dt + (parte_entera * tarea.dt) - resto
106
107 for x in tareas_a_eliminar:
108 if x in self.tareas_planificadas:
109 self.tareas_planificadas.remove(x)
110
112 """Agrega una nueva tarea para ejecutarse luego.
113
114 :param tarea: Referencia a la tarea que se debe agregar.
115 """
116 self.tareas_planificadas.append(tarea)
117
118 - def una_vez(self, time_out, function, params=[]):
119 """Genera una tarea que se ejecutará usan sola vez.
120
121 :param time_out: Cantidad se segundos que deben transcurrir para ejecutar la tarea.
122 :param function: Función a ejecutar para lanzar la tarea.
123 :param params: Parámetros que tiene que recibir la función a ejecutar.
124 """
125 tarea = Tarea(self, self.contador_de_tiempo + time_out, time_out, function, params, True)
126 self._agregar(tarea)
127 return tarea
128
129 - def siempre(self, time_out, function, params=[]):
130 """Genera una tarea para ejecutar todo el tiempo, sin expiración.
131
132 :param time_out: Cantidad se segundos que deben transcurrir para ejecutar la tarea.
133 :param function: Función a ejecutar para lanzar la tarea.
134 :param params: Parámetros que tiene que recibir la función a ejecutar.
135 """
136 tarea = Tarea(self, self.contador_de_tiempo + time_out, time_out, function, params, False)
137 self._agregar(tarea)
138 return tarea
139
141 """Genera una tarea que se puede ejecutar una vez o mas, pero que tiene una condición.
142
143 La tarea se ejecutará hasta que la función a ejecutar revuelva False.
144
145 :param time_out: Cantidad se segundos que deben transcurrir para ejecutar la tarea.
146 :param function: Función a ejecutar para lanzar la tarea.
147 :param params: Parámetros que tiene que recibir la función a ejecutar.
148 """
149 tarea = TareaCondicional(self, self.contador_de_tiempo + time_out, time_out, function, params, False)
150 self._agregar(tarea)
151 return tarea
152
154 """Elimina una tarea de la lista de tareas planificadas.
155
156 :param tarea: Referencia a la tarea que se tiene que eliminar.
157 """
158 self.tareas_planificadas.remove(tarea)
159
161 """Elimina todas las tareas de la lista de planificadas."""
162 self.tareas_planificadas = []
163