进程附加成功?

pull/914/head
Bakadax 2025-04-30 19:16:22 +08:00
parent 1b8ae4cdb9
commit 01b2618f83
3 changed files with 23 additions and 27 deletions

12
bot.py
View File

@ -14,6 +14,9 @@ from src.common.logger_manager import get_logger
from src.common.crash_logger import install_crash_handler
from src.main import MainSystem
from src.main import MainSystem
from src.plugins.group_nickname.nickname_processor import start_nickname_processor, stop_nickname_processor # <--- 添加这行导入
import atexit
logger = get_logger("main")
confirm_logger = get_logger("confirm")
@ -221,6 +224,15 @@ def raw_main():
env_config = {key: os.getenv(key) for key in os.environ}
scan_provider(env_config)
# 在这里启动绰号处理进程
logger.info("准备启动绰号处理进程...")
start_nickname_processor() # <--- 添加启动调用
logger.info("已调用启动绰号处理进程。")
# 注册退出处理函数 (确保进程能被关闭)
atexit.register(stop_nickname_processor) # <--- 在这里注册停止函数
logger.info("已注册绰号处理进程的退出处理程序。")
# 返回MainSystem实例
return MainSystem()

View File

@ -1,5 +1,4 @@
import asyncio
import atexit # 导入atexit
import time
from .plugins.utils.statistic import LLMStatistics
from .plugins.moods.moods import MoodManager
@ -18,7 +17,6 @@ from .common.logger_manager import get_logger
from .plugins.remote import heartbeat_thread # noqa: F401
from .individuality.individuality import Individuality
from .common.server import global_server
from src.plugins.group_nickname.nickname_processor import start_nickname_processor, stop_nickname_processor
logger = get_logger("main")
@ -179,23 +177,11 @@ class MainSystem:
async def main():
"""主函数"""
system = MainSystem()
# 注册退出处理函数
atexit.register(stop_nickname_processor) # <--- 添加退出处理
await asyncio.gather(
system.initialize(),
system.schedule_tasks(),
)
try:
# 启动绰号处理进程
start_nickname_processor() # <--- 启动
await asyncio.gather(
system.initialize(),
system.schedule_tasks(),
)
except KeyboardInterrupt:
print("程序被中断")
# finally 块不再需要手动调用 stopatexit 会处理
# finally:
# print("正在关闭...")
# stop_nickname_processor() # <--- 关闭
if __name__ == "__main__":
asyncio.run(main())
asyncio.run(main())

View File

@ -1,10 +1,7 @@
# GroupNickname/nickname_processor.py
import asyncio
import threading
import traceback
# 明确导入 Event 和 Queue
from multiprocessing import Process, Queue as mpQueue
from multiprocessing.synchronize import Event as mpEvent # 从 synchronize 导入 Event
from multiprocessing import Process, Queue as mpQueue, Event
from typing import Dict, Optional
from pymongo import MongoClient
@ -17,7 +14,7 @@ from src.common.database import db # 导入数据库初始化和关闭函数
logger = get_logger("nickname_processor") # 获取日志记录器实例
# --- 运行时状态 (用于安全停止进程) ---
_stop_event = threading.Event()
_stop_event = Event()
# --- 数据库连接 ---
mongo_client: Optional[MongoClient] = None # MongoDB 客户端实例
@ -129,12 +126,13 @@ async def add_to_nickname_queue(
logger.warning(f"无法将项目添加到绰号队列(可能已满): {e}", exc_info=True)
async def _nickname_processing_loop(queue: mpQueue, stop_event: mpEvent):
async def _nickname_processing_loop(queue: mpQueue, stop_event):
"""独立进程中的主循环,处理队列任务。"""
logger.info("绰号处理循环已启动。")
while not stop_event.is_set():
logger.info("绰号处理循环正在运行...")
try:
if not queue.empty():
item = queue.get()
@ -149,7 +147,7 @@ async def _nickname_processing_loop(queue: mpQueue, stop_event: mpEvent):
else:
logger.warning(f"从队列接收到意外的项目类型: {type(item)}")
await asyncio.sleep(0.05)
await asyncio.sleep(5)
else:
await asyncio.sleep(global_config.NICKNAME_PROCESS_SLEEP_INTERVAL)
@ -163,7 +161,7 @@ async def _nickname_processing_loop(queue: mpQueue, stop_event: mpEvent):
logger.info("绰号处理循环已结束。")
def _run_processor_process(queue: mpQueue, stop_event: mpEvent):
def _run_processor_process(queue: mpQueue, stop_event):
"""进程启动函数,运行异步循环。"""
try:
loop = asyncio.new_event_loop()