18
18
19
19
from collections import deque
20
20
from contextlib import suppress
21
- from typing import List , Set , Dict , Counter , Any
21
+ from typing import TYPE_CHECKING , List , Set , Dict , Counter , Any
22
22
23
- from cylc .flow .task_proxy import TaskProxy
24
23
from cylc .flow .task_queues import TaskQueueManagerBase
25
24
25
+ if TYPE_CHECKING :
26
+ from cylc .flow .task_proxy import TaskProxy
27
+
26
28
27
29
class LimitedTaskQueue :
28
30
"""One task queue with group members and active limit."""
@@ -33,16 +35,16 @@ def __init__(self, limit: int, members: Set[str]) -> None:
33
35
self .members = members # member task names
34
36
self .deque : deque = deque ()
35
37
36
- def push_task (self , itask : TaskProxy ) -> None :
38
+ def push_task (self , itask : ' TaskProxy' ) -> None :
37
39
"""Queue task if in my membership list."""
38
40
if itask .tdef .name in self .members :
39
41
self .deque .appendleft (itask )
40
42
41
- def release (self , active : Counter [str ]) -> List [TaskProxy ]:
43
+ def release (self , active : Counter [str ]) -> List [' TaskProxy' ]:
42
44
"""Release tasks if below the active limit."""
43
45
# The "active" argument counts active tasks by name.
44
- released : List [TaskProxy ] = []
45
- held : List [TaskProxy ] = []
46
+ released : List [' TaskProxy' ] = []
47
+ held : List [' TaskProxy' ] = []
46
48
n_active : int = 0
47
49
for mem in self .members :
48
50
n_active += active [mem ]
@@ -62,7 +64,7 @@ def release(self, active: Counter[str]) -> List[TaskProxy]:
62
64
self .deque .appendleft (itask )
63
65
return released
64
66
65
- def remove (self , itask : TaskProxy ) -> bool :
67
+ def remove (self , itask : ' TaskProxy' ) -> bool :
66
68
"""Remove a single task from queue, return True if removed."""
67
69
try :
68
70
self .deque .remove (itask )
@@ -111,30 +113,30 @@ def __init__(self,
111
113
config ["limit" ], config ["members" ]
112
114
)
113
115
114
- self .force_released : Set [TaskProxy ] = set ()
116
+ self .force_released : Set [' TaskProxy' ] = set ()
115
117
116
- def push_task (self , itask : TaskProxy ) -> None :
118
+ def push_task (self , itask : ' TaskProxy' ) -> None :
117
119
"""Push a task to the appropriate queue."""
118
120
for queue in self .queues .values ():
119
121
queue .push_task (itask )
120
122
121
- def release_tasks (self , active : Counter [str ]) -> List [TaskProxy ]:
123
+ def release_tasks (self , active : Counter [str ]) -> List [' TaskProxy' ]:
122
124
"""Release tasks up to the queue limits."""
123
- released : List [TaskProxy ] = []
125
+ released : List [' TaskProxy' ] = []
124
126
for queue in self .queues .values ():
125
127
released += queue .release (active )
126
128
if self .force_released :
127
- released += list (self .force_released )
129
+ released . extend (self .force_released )
128
130
self .force_released = set ()
129
131
return released
130
132
131
- def remove_task (self , itask : TaskProxy ) -> None :
133
+ def remove_task (self , itask : ' TaskProxy' ) -> None :
132
134
"""Remove a task from whichever queue it belongs to."""
133
135
for queue in self .queues .values ():
134
136
if queue .remove (itask ):
135
137
break
136
138
137
- def force_release_task (self , itask : TaskProxy ) -> None :
139
+ def force_release_task (self , itask : ' TaskProxy' ) -> None :
138
140
"""Remove a task from whichever queue it belongs to.
139
141
140
142
To be returned when release_tasks() is next called.
0 commit comments