mirror of https://github.com/Mai-with-u/MaiBot.git
进程附加成功?
parent
1b8ae4cdb9
commit
01b2618f83
12
bot.py
12
bot.py
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
24
src/main.py
24
src/main.py
|
|
@ -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 块不再需要手动调用 stop,atexit 会处理
|
||||
# finally:
|
||||
# print("正在关闭...")
|
||||
# stop_nickname_processor() # <--- 关闭
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
asyncio.run(main())
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue