From 3e4b678a87cccf8db15f1c612112a3e17ebdd19f Mon Sep 17 00:00:00 2001 From: liuwei Date: Fri, 30 May 2025 09:12:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=BA=BF=E7=A8=8B=E5=8F=91?= =?UTF-8?q?=E9=80=81=E3=80=82=E9=98=B2=E6=AD=A2=E9=98=BB=E5=A1=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/dashboard/blueprints/contacts.py | 28 ++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/admin/dashboard/blueprints/contacts.py b/admin/dashboard/blueprints/contacts.py index 190086b..88f4ec6 100644 --- a/admin/dashboard/blueprints/contacts.py +++ b/admin/dashboard/blueprints/contacts.py @@ -10,11 +10,35 @@ contacts_bp = Blueprint('contacts', __name__, url_prefix='/contacts') def send_message_in_thread(func, *args, **kwargs): """在独立线程中发送消息""" def run(): + loop = None try: - # 在新线程中运行异步函数 - asyncio.run(func(*args, **kwargs)) + # 创建新的事件循环 + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + # 运行异步函数 + loop.run_until_complete(func(*args, **kwargs)) except Exception as e: logger.error(f"发送消息失败: {e}") + finally: + # 确保清理资源 + if loop is not None: + try: + # 取消所有待处理的任务 + pending = asyncio.all_tasks(loop) + for task in pending: + task.cancel() + + # 运行事件循环直到所有任务都被取消 + loop.run_until_complete(asyncio.gather(*pending, return_exceptions=True)) + + # 停止事件循环 + loop.stop() + + # 关闭事件循环 + loop.close() + except Exception as e: + logger.error(f"清理资源失败: {e}") # 创建并启动线程 thread = threading.Thread(target=run)