@@ -93,8 +93,6 @@ def __init__(
9393 # Task tracking for monitoring
9494 self ._running_tasks : dict [str , RunningTaskItem ] = {}
9595 self ._task_lock = threading .Lock ()
96- self ._completed_tasks = []
97- self .completed_tasks_max_show_size = 10
9896
9997 # Configure shutdown wait behavior from config or default
10098 self .stop_wait = (
@@ -128,6 +126,10 @@ def wrapped_handler(messages: list[ScheduleMessageItem]):
128126 self .status_tracker .task_started (
129127 task_id = task_item .item_id , user_id = task_item .user_id
130128 )
129+ # Record task as running for monitoring (LocalQueue only)
130+ if isinstance (self .memos_message_queue , SchedulerLocalQueue ):
131+ with self ._task_lock :
132+ self ._running_tasks [task_item .item_id ] = task_item
131133 try :
132134 # --- mark start: record queuing time(now - enqueue_ts)---
133135 now = time .time ()
@@ -179,14 +181,12 @@ def wrapped_handler(messages: list[ScheduleMessageItem]):
179181 redis_message_id = redis_message_id ,
180182 )
181183
182- # Mark task as completed and remove from tracking
183- with self ._task_lock :
184- if task_item .item_id in self ._running_tasks :
185- task_item .mark_completed (result )
186- del self ._running_tasks [task_item .item_id ]
187- self ._completed_tasks .append (task_item )
188- if len (self ._completed_tasks ) > self .completed_tasks_max_show_size :
189- self ._completed_tasks .pop (0 )
184+ # Mark task as completed and remove from tracking (LocalQueue only)
185+ if isinstance (self .memos_message_queue , SchedulerLocalQueue ):
186+ with self ._task_lock :
187+ if task_item .item_id in self ._running_tasks :
188+ task_item .mark_completed (result )
189+ del self ._running_tasks [task_item .item_id ]
190190 logger .info (f"Task completed: { task_item .get_execution_info ()} " )
191191 return result
192192
@@ -197,13 +197,12 @@ def wrapped_handler(messages: list[ScheduleMessageItem]):
197197 self .status_tracker .task_failed (
198198 task_id = task_item .item_id , user_id = task_item .user_id , error_message = str (e )
199199 )
200- # Mark task as failed and remove from tracking
201- with self ._task_lock :
202- if task_item .item_id in self ._running_tasks :
203- task_item .mark_failed (str (e ))
204- del self ._running_tasks [task_item .item_id ]
205- if len (self ._completed_tasks ) > self .completed_tasks_max_show_size :
206- self ._completed_tasks .pop (0 )
200+ # Mark task as failed and remove from tracking (LocalQueue only)
201+ if isinstance (self .memos_message_queue , SchedulerLocalQueue ):
202+ with self ._task_lock :
203+ if task_item .item_id in self ._running_tasks :
204+ task_item .mark_failed (str (e ))
205+ del self ._running_tasks [task_item .item_id ]
207206 logger .error (f"Task failed: { task_item .get_execution_info ()} , Error: { e } " )
208207
209208 raise
@@ -238,10 +237,20 @@ def get_running_tasks(
238237 lambda task: task.user_id == "user123" and task.status == "running"
239238 )
240239 """
241- with self ._task_lock :
240+ # Use lock only for LocalQueue; otherwise read without lock
241+ if isinstance (self .memos_message_queue , SchedulerLocalQueue ):
242+ with self ._task_lock :
243+ if filter_func is None :
244+ return self ._running_tasks .copy ()
245+
246+ return {
247+ task_id : task_item
248+ for task_id , task_item in self ._running_tasks .items ()
249+ if filter_func (task_item )
250+ }
251+ else :
242252 if filter_func is None :
243253 return self ._running_tasks .copy ()
244-
245254 return {
246255 task_id : task_item
247256 for task_id , task_item in self ._running_tasks .items ()
@@ -255,7 +264,11 @@ def get_running_task_count(self) -> int:
255264 Returns:
256265 Number of running tasks
257266 """
258- with self ._task_lock :
267+ # Use lock only for LocalQueue; otherwise read without lock
268+ if isinstance (self .memos_message_queue , SchedulerLocalQueue ):
269+ with self ._task_lock :
270+ return len (self ._running_tasks )
271+ else :
259272 return len (self ._running_tasks )
260273
261274 def register_handler (self , label : str , handler : Callable [[list [ScheduleMessageItem ]], None ]):
@@ -393,10 +406,6 @@ def dispatch(self, msg_list: list[ScheduleMessageItem]):
393406 messages = msgs ,
394407 )
395408
396- # Track running task for status/monitoring
397- with self ._task_lock :
398- self ._running_tasks [task_item .item_id ] = task_item
399-
400409 # Create wrapped handler for task tracking
401410 wrapped_handler = self ._create_task_wrapper (handler , task_item )
402411
0 commit comments