🐛 fix 多线程占用数据库的问题

This commit is contained in:
snowy 2024-08-10 22:54:00 +08:00
parent 0d16d53cb7
commit 1b1ddbdd8d
6 changed files with 53 additions and 18 deletions

View File

@ -122,8 +122,6 @@ $$$$$$$$/ $$$$$$/ $$/ $$$$$$$$/ $$/ $$$$$$/ $$/ $$/ $$$$$$/
else: else:
cmd = "nohup" cmd = "nohup"
self.process_manager.terminate_all() self.process_manager.terminate_all()
# 等待所有进程退出
self.process_manager.chan_active.receive("main")
# 进程退出后重启 # 进程退出后重启
threading.Thread(target=os.system, args=(f"{cmd} {executable} {' '.join(args)}",)).start() threading.Thread(target=os.system, args=(f"{cmd} {executable} {' '.join(args)}",)).start()
sys.exit(0) sys.exit(0)
@ -143,10 +141,9 @@ $$$$$$$$/ $$$$$$/ $$/ $$$$$$$$/ $$/ $$$$$$/ $$/ $$/ $$$$$$/
self.loop.create_task(self.lifespan.before_shutdown()) # 停止前钩子 self.loop.create_task(self.lifespan.before_shutdown()) # 停止前钩子
if name: if name:
self.chan_active.send(1, name) self.process_manager.terminate(name)
else: else:
for name in self.process_manager.targets: self.process_manager.terminate_all()
self.chan_active.send(1, name)
def init(self, *args, **kwargs): def init(self, *args, **kwargs):
""" """

View File

@ -0,0 +1,49 @@
import os
from typing import List
import nonebot
import yaml
from pydantic import BaseModel
config = {} # 主进程全局配置,确保加载后读取
class SatoriNodeConfig(BaseModel):
host: str = ""
port: str = "5500"
path: str = ""
token: str = ""
class SatoriConfig(BaseModel):
comment: str = "These features are still in development. Do not enable in production environment."
enable: bool = False
hosts: List[SatoriNodeConfig] = [SatoriNodeConfig()]
class BasicConfig(BaseModel):
host: str = "127.0.0.1"
port: int = 20216
superusers: list[str] = []
command_start: list[str] = ["/", ""]
nickname: list[str] = [f"LiteyukiBot"]
satori: SatoriConfig = SatoriConfig()
data_path: str = "data/liteyuki"
def load_from_yaml(file: str) -> dict:
global config
nonebot.logger.debug("Loading config from %s" % file)
if not os.path.exists(file):
nonebot.logger.warning(f"Config file {file} not found, created default config, please modify it and restart")
with open(file, "w", encoding="utf-8") as f:
yaml.dump(BasicConfig().dict(), f, default_flow_style=False)
with open(file, "r", encoding="utf-8") as f:
conf = yaml.load(f, Loader=yaml.FullLoader)
config = conf
if conf is None:
nonebot.logger.warning(f"Config file {file} is empty, use default config. please modify it and restart")
conf = BasicConfig().dict()
return conf

View File

@ -4,7 +4,6 @@
""" """
import asyncio import asyncio
import inspect import inspect
import threading
from pathlib import Path from pathlib import Path
from typing import Any, Callable, Coroutine from typing import Any, Callable, Coroutine

View File

@ -1,5 +1,5 @@
from liteyuki import LiteyukiBot from liteyuki import LiteyukiBot
from src.utils import load_from_yaml from liteyuki.config import load_from_yaml
if __name__ == "__main__": if __name__ == "__main__":
bot = LiteyukiBot(**load_from_yaml("config.yml")) bot = LiteyukiBot(**load_from_yaml("config.yml"))

View File

@ -5,8 +5,6 @@ import nonebot
import yaml import yaml
from pydantic import BaseModel from pydantic import BaseModel
from .data_manager import StoredConfig, TempConfig, common_db
from .ly_typing import T_Bot
from ..message.tools import random_hex_string from ..message.tools import random_hex_string
config = {} # 全局配置,确保加载后读取 config = {} # 全局配置,确保加载后读取
@ -70,9 +68,6 @@ def get_config(key: str, default=None):
elif key in config: elif key in config:
return config[key] return config[key]
elif key in common_db.where_one(StoredConfig(), default=StoredConfig()).config:
return common_db.where_one(StoredConfig(), default=StoredConfig()).config[key]
elif key in load_from_yaml("config.yml"): elif key in load_from_yaml("config.yml"):
return load_from_yaml("config.yml")[key] return load_from_yaml("config.yml")[key]
@ -80,11 +75,6 @@ def get_config(key: str, default=None):
return default return default
def set_stored_config(key: str, value):
temp_config: TempConfig = common_db.where_one(TempConfig(), default=TempConfig())
temp_config.data[key] = value
common_db.save(temp_config)
def init_conf(conf: dict) -> dict: def init_conf(conf: dict) -> dict:
""" """

View File

@ -3,7 +3,7 @@ import os
from pydantic import Field from pydantic import Field
from .data import Database, LiteModel, Database from .data import Database, LiteModel, Database
print("导入数据库模块")
DATA_PATH = "data/liteyuki" DATA_PATH = "data/liteyuki"
user_db: Database = Database(os.path.join(DATA_PATH, "users.ldb")) user_db: Database = Database(os.path.join(DATA_PATH, "users.ldb"))
group_db: Database = Database(os.path.join(DATA_PATH, "groups.ldb")) group_db: Database = Database(os.path.join(DATA_PATH, "groups.ldb"))