speed up event wait
This commit is contained in:
@@ -228,7 +228,7 @@ class ASEngineClient:
|
|||||||
self.sid = None
|
self.sid = None
|
||||||
print("Disconnected from server")
|
print("Disconnected from server")
|
||||||
|
|
||||||
def send_text(self, route: str, text: str, id:str="", wait_for_ack: bool = False, timeout: int = 5) -> bool:
|
def send_text(self, route: str, text: str, id:str="", wait_for_ack: bool = False, timeout: int = 5, return_event: bool = False) -> Any:
|
||||||
"""
|
"""
|
||||||
发送文本消息
|
发送文本消息
|
||||||
:param route: 目标路由
|
:param route: 目标路由
|
||||||
@@ -236,7 +236,8 @@ class ASEngineClient:
|
|||||||
:param id: 发送者ID
|
:param id: 发送者ID
|
||||||
:param wait_for_ack: 是否等待服务器ACK确认
|
:param wait_for_ack: 是否等待服务器ACK确认
|
||||||
:param timeout: 等待ACK的超时时间(秒)
|
:param timeout: 等待ACK的超时时间(秒)
|
||||||
:return: 是否发送成功(若wait_for_ack为True,则返回是否收到ACK)
|
:param return_event: 是否返回事件对象和ack_id而不是等待ACK
|
||||||
|
:return: 如果wait_for_ack为True且return_event为False,返回是否收到ACK;如果return_event为True,返回(event, ack_id);否则返回是否发送成功
|
||||||
"""
|
"""
|
||||||
if not self.connected:
|
if not self.connected:
|
||||||
print("Not connected to server")
|
print("Not connected to server")
|
||||||
@@ -268,6 +269,10 @@ class ASEngineClient:
|
|||||||
event = Event()
|
event = Event()
|
||||||
self.ack_events[ack_id] = event
|
self.ack_events[ack_id] = event
|
||||||
|
|
||||||
|
# 如果需要返回事件对象,直接返回
|
||||||
|
if return_event:
|
||||||
|
return event, ack_id
|
||||||
|
|
||||||
# 等待ACK或超时
|
# 等待ACK或超时
|
||||||
received_ack = event.wait(timeout=timeout)
|
received_ack = event.wait(timeout=timeout)
|
||||||
|
|
||||||
@@ -428,6 +433,31 @@ class HSAEngineClient(ASEngineClient):
|
|||||||
super().__init__(server_url, namespace, id)
|
super().__init__(server_url, namespace, id)
|
||||||
self.chatmanager = chatmanager
|
self.chatmanager = chatmanager
|
||||||
def loadmarkdown(self, fmd, fmdp, fsp):
|
def loadmarkdown(self, fmd, fmdp, fsp):
|
||||||
self.send_text('markdown-in', fmd, self.id, wait_for_ack=True)
|
# 并行发送三个消息,获取事件对象和ack_id
|
||||||
self.send_text('markdown-prompt-in', fmdp, self.id, wait_for_ack=True)
|
event1, ack_id1 = self.send_text('markdown-in', fmd, self.id, wait_for_ack=True, return_event=True)
|
||||||
self.send_text('score-prompt-in', fsp, self.id, wait_for_ack=True)
|
event2, ack_id2 = self.send_text('markdown-prompt-in', fmdp, self.id, wait_for_ack=True, return_event=True)
|
||||||
|
event3, ack_id3 = self.send_text('score-prompt-in', fsp, self.id, wait_for_ack=True, return_event=True)
|
||||||
|
|
||||||
|
# 等待所有事件完成
|
||||||
|
timeout = 5 # 超时时间
|
||||||
|
success1 = event1.wait(timeout=timeout)
|
||||||
|
success2 = event2.wait(timeout=timeout)
|
||||||
|
success3 = event3.wait(timeout=timeout)
|
||||||
|
|
||||||
|
# 清理ACK事件
|
||||||
|
if ack_id1 in self.ack_events:
|
||||||
|
del self.ack_events[ack_id1]
|
||||||
|
if ack_id2 in self.ack_events:
|
||||||
|
del self.ack_events[ack_id2]
|
||||||
|
if ack_id3 in self.ack_events:
|
||||||
|
del self.ack_events[ack_id3]
|
||||||
|
|
||||||
|
# 检查是否所有ACK都成功收到
|
||||||
|
if not success1:
|
||||||
|
print(f"ACK timeout for message: {ack_id1}")
|
||||||
|
if not success2:
|
||||||
|
print(f"ACK timeout for message: {ack_id2}")
|
||||||
|
if not success3:
|
||||||
|
print(f"ACK timeout for message: {ack_id3}")
|
||||||
|
|
||||||
|
return success1 and success2 and success3
|
||||||
|
|||||||
Reference in New Issue
Block a user