modify: 说明wd

This commit is contained in:
2026-01-05 20:33:18 +08:00
parent 38c0b6cea3
commit 45bae10ceb
12 changed files with 357 additions and 186 deletions
+10 -1
View File
@@ -19,6 +19,7 @@ class TaskMeta:
description: str = field(default="", metadata={"help": "任务描述"})
max_retries: int = field(default=3, metadata={"help": "任务最大重试次数"})
delay: float = field(default=1, metadata={"help": "任务延迟执行时间"})
other: dict = field(default_factory=dict, metadata={"help": "其他参数"})
class TaskMounter:
@@ -36,8 +37,16 @@ class TaskMounter:
description = meta.get("description", "")
max_retries = meta.get("max_retries", 3)
delay = meta.get("delay", 1)
meta_other = {}
for key, value in meta.items():
if key not in TaskMeta.__annotations__.keys():
meta_other[key] = value
task_meta = TaskMeta(
name=name, description=description, max_retries=max_retries, delay=delay
name=name,
description=description,
max_retries=max_retries,
delay=delay,
other=meta_other,
)
function.meta = task_meta # type: ignore
setattr(TaskMounter, function.__name__, function)
@@ -78,7 +78,7 @@ class ListenOperation:
WHEN OLD.value <> NEW.value
BEGIN
INSERT INTO change_log (table_name, row_id, column_name, old_value, new_value)
VALUES ('listen_table', NEW.id, 'key', OLD.key, NEW.key);
VALUES ('listen_table', NEW.id, OLD.key, OLD.value, NEW.value);
END
"""
)
@@ -59,6 +59,7 @@ class AsyncQueueScheduler(BaseScheduler):
def start(self):
self.receive_scheduler.start_receive_thread()
self.task_scheduler.start_task_thread()
self.listen_scheduler.start_listen_data()
def stop(self):
self.receive_scheduler.stop_receive_thread()
@@ -15,6 +15,7 @@ from ...mounter.listen_mounter import ListenMounter
import threading
import multiprocessing
import concurrent.futures
import logging
class AsyncListenDataScheduler:
@@ -49,8 +50,8 @@ class AsyncListenDataScheduler:
tasks = []
if status:
for data in change_data_items:
key = data[6]
new_value = data[7]
key = data[3]
new_value = data[5]
delete_id = data[0]
tasks.append(
asyncio.create_task(
@@ -63,11 +64,22 @@ class AsyncListenDataScheduler:
else:
await asyncio.sleep(0.05)
def _run_listen_loop(self):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
loop.run_until_complete(self.listen())
except Exception as e:
logging.error(f"监听调度出错: {str(e)}")
finally:
loop.close()
def start_listen_data(self):
if self.is_running:
return
self.is_running = True
self.listen_thread = threading.Thread(target=self.listen)
self.listen_thread = threading.Thread(target=self._run_listen_loop, daemon=True)
self.listen_thread.start()
def stop_listen_data(self):
@@ -31,7 +31,6 @@ class CleanupScheduler:
self.remove_days = remove_days
self.max_db_size_mb = 500
# for i in range(self.queue_operation.shard_num):
# 清理过期但未处理的消息
self.queue_operation.clean_expired_messages()
# 彻底删除30天前的消息
@@ -67,7 +67,6 @@ class StandardQueueScheduler(BaseScheduler):
self.listen_scheduler.stop_listen_data()
self.task_scheduler.stop_task_thread()
self.cleanup_scheduler.stop_cleanup()
# self.queue_operation.close_all_connections()
__all__ = ["StandardQueueScheduler"]
@@ -38,12 +38,13 @@ class ListenDataScheduler:
status, change_data_items = self.listen_operation.listen_data()
if status:
for data in change_data_items:
key = data[6]
new_value = data[7]
key = data[3]
new_value = data[5]
delete_id = data[0]
self.executor.submit(
self._process_listen_data, key, new_value, delete_id
)
if self.is_running:
self.executor.submit(
self._process_listen_data, key, new_value, delete_id
)
def start_listen_data(self):
if self.is_running:
@@ -38,7 +38,6 @@ class ReceiveScheduler:
def send_message(self, message: MessageItem, callback: Callable = None): # type: ignore
if callback is None:
callback = lambda message: logging.info(f"receive message: {message.id}")
# self.queue_operation.enqueue(message.to_dict())
self.queue_operation.enqueue(message.to_dict_by_core())
with self.lock:
self.callbacks[message.id] = callback