mirror of
https://github.com/LiteyukiStudio/LiteyukiBot.git
synced 2024-11-23 07:57:37 +08:00
🐛 fix 多线程占用数据库的问题
This commit is contained in:
parent
0d16d53cb7
commit
1b1ddbdd8d
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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
|
@ -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
|
||||||
|
|
||||||
|
2
main.py
2
main.py
@ -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"))
|
||||||
|
@ -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:
|
||||||
"""
|
"""
|
||||||
|
@ -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"))
|
||||||
|
Loading…
Reference in New Issue
Block a user