modify: 说明wd
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user