modify: message_item result 字段序列化增强

This commit is contained in:
chakcy 2025-08-11 14:56:25 +08:00
parent 38e7cb55fe
commit 32e22aee18
3 changed files with 35 additions and 5 deletions

View File

@ -88,6 +88,16 @@ class MessageItem:
else:
raise ValueError(f"请使用 'str''datetime' 类型设置 {field} 字段")
if 'result' in data:
if data['result'] == 'null':
data['result'] = {}
elif isinstance(data['result'], str):
data['result'] = json.loads(data['result'])
if 'tags' in data:
if data['tags'] == 'null':
data['tags'] = None
# 处理枚举字段
if 'type' in data:
if isinstance(data['type'], str):

View File

@ -5,6 +5,7 @@ from concurrent.futures import ThreadPoolExecutor
import threading
import time
class ReceiveScheduler:
def __init__(self, queue_operation: QueueOperation, receive_thread_num: int = 1):
self.callbacks = dict()
@ -31,13 +32,14 @@ class ReceiveScheduler:
if message_list:
for message in message_list:
message = MessageItem.from_dict(message)
callback = None
callback_default = lambda message: message
with self.lock:
callback = self.callbacks.pop(message.id, None)
if callback is None:
callback = callback_default
if callback:
# 使用线程池并行执行回调
self.executor.submit(self._safe_callback, callback, message)
# 使用线程池并行执行回调
self.executor.submit(self._safe_callback, callback, message)
else:
time.sleep(0.1) # 适当休眠避免CPU空转

View File

@ -1,6 +1,7 @@
from ..model import MessageItem
from typing import Callable, Optional
from ..constant import MessageStatus
import json
class TaskCycle:
def __init__(self, message_item: MessageItem, callback: Optional[Callable]):
@ -23,7 +24,24 @@ class TaskCycle:
self.task_error = None
def get_task_result(self):
return self.task_result
if isinstance(self.task_result, (dict, list)):
try:
return json.dumps(self.task_result)
except:
return json.dumps({'result': str(self.task_result)})
elif isinstance(self.task_result, str):
try:
json.loads(self.task_result)
return self.task_result
except:
return json.dumps({'result': self.task_result})
elif isinstance(self.task_result, (int, float, bool)):
return json.dumps({'result': self.task_result})
elif self.task_result is None:
return 'null'
else:
return json.dumps({'result': str(self.task_result)})
def get_task_status(self):
return self.task_status