mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-09 07:16:04 +00:00
chore: 删除已弃用的文件
This commit is contained in:
@@ -1 +0,0 @@
|
||||
from .threadctl import ThreadCtl
|
||||
@@ -1,10 +1,8 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import threading
|
||||
from . import threadctl
|
||||
|
||||
from ..database import manager as db_mgr
|
||||
from ..openai import manager as openai_mgr
|
||||
from ..qqbot import manager as qqbot_mgr
|
||||
from ..config import manager as config_mgr
|
||||
from ..plugin import host as plugin_host
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
import logging
|
||||
import importlib
|
||||
import pkgutil
|
||||
import asyncio
|
||||
|
||||
from . import context
|
||||
from ..plugin import host as plugin_host
|
||||
|
||||
|
||||
def walk(module, prefix='', path_prefix=''):
|
||||
"""遍历并重载所有模块"""
|
||||
for item in pkgutil.iter_modules(module.__path__):
|
||||
if item.ispkg:
|
||||
|
||||
walk(__import__(module.__name__ + '.' + item.name, fromlist=['']), prefix + item.name + '.', path_prefix + item.name + '/')
|
||||
else:
|
||||
logging.info('reload module: {}, path: {}'.format(prefix + item.name, path_prefix + item.name + '.py'))
|
||||
plugin_host.__current_module_path__ = "plugins/" + path_prefix + item.name + '.py'
|
||||
importlib.reload(__import__(module.__name__ + '.' + item.name, fromlist=['']))
|
||||
|
||||
|
||||
def reload_all(notify=True):
|
||||
# 解除bot的事件注册
|
||||
import pkg
|
||||
context.get_qqbot_manager().unsubscribe_all()
|
||||
# 执行关闭流程
|
||||
logging.info("执行程序关闭流程")
|
||||
import main
|
||||
main.stop()
|
||||
|
||||
# 删除所有已注册的命令
|
||||
import pkg.qqbot.cmds.aamgr as cmdsmgr
|
||||
cmdsmgr.__command_list__ = {}
|
||||
cmdsmgr.__tree_index__ = {}
|
||||
|
||||
# 重载所有模块
|
||||
context.context['exceeded_keys'] = context.get_openai_manager().key_mgr.exceeded
|
||||
this_context = context.context
|
||||
walk(pkg)
|
||||
importlib.reload(__import__("config-template"))
|
||||
importlib.reload(__import__('config'))
|
||||
importlib.reload(__import__('main'))
|
||||
importlib.reload(__import__('banlist'))
|
||||
importlib.reload(__import__('tips'))
|
||||
context.context = this_context
|
||||
|
||||
# 重载插件
|
||||
import plugins
|
||||
walk(plugins)
|
||||
|
||||
# 初始化相关文件
|
||||
main.check_file()
|
||||
|
||||
# 执行启动流程
|
||||
logging.info("执行程序启动流程")
|
||||
|
||||
context.get_thread_ctl().reload(
|
||||
admin_pool_num=4,
|
||||
user_pool_num=8
|
||||
)
|
||||
|
||||
def run_wrapper():
|
||||
asyncio.run(main.start_process(False))
|
||||
|
||||
context.get_thread_ctl().submit_sys_task(
|
||||
run_wrapper
|
||||
)
|
||||
|
||||
logging.info('程序启动完成')
|
||||
if notify:
|
||||
context.get_qqbot_manager().notify_admin("重载完成")
|
||||
@@ -1,93 +0,0 @@
|
||||
import threading
|
||||
import time
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
|
||||
class Pool:
|
||||
"""线程池结构"""
|
||||
pool_num:int = None
|
||||
ctl:ThreadPoolExecutor = None
|
||||
task_list:list = None
|
||||
task_list_lock:threading.Lock = None
|
||||
monitor_type = True
|
||||
|
||||
def __init__(self, pool_num):
|
||||
self.pool_num = pool_num
|
||||
self.ctl = ThreadPoolExecutor(max_workers = self.pool_num)
|
||||
self.task_list = []
|
||||
self.task_list_lock = threading.Lock()
|
||||
|
||||
def __thread_monitor__(self):
|
||||
while self.monitor_type:
|
||||
for t in self.task_list:
|
||||
if not t.done():
|
||||
continue
|
||||
try:
|
||||
self.task_list.pop(self.task_list.index(t))
|
||||
except:
|
||||
continue
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
class ThreadCtl:
|
||||
def __init__(self, sys_pool_num, admin_pool_num, user_pool_num):
|
||||
"""线程池控制类
|
||||
sys_pool_num:分配系统使用的线程池数量(>=8)
|
||||
admin_pool_num:用于处理管理员消息的线程池数量(>=1)
|
||||
user_pool_num:分配用于处理用户消息的线程池的数量(>=1)
|
||||
"""
|
||||
if sys_pool_num < 5:
|
||||
raise Exception("Too few system threads(sys_pool_num needs >= 8, but received {})".format(sys_pool_num))
|
||||
if admin_pool_num < 1:
|
||||
raise Exception("Too few admin threads(admin_pool_num needs >= 1, but received {})".format(admin_pool_num))
|
||||
if user_pool_num < 1:
|
||||
raise Exception("Too few user threads(user_pool_num needs >= 1, but received {})".format(admin_pool_num))
|
||||
self.__sys_pool__ = Pool(sys_pool_num)
|
||||
self.__admin_pool__ = Pool(admin_pool_num)
|
||||
self.__user_pool__ = Pool(user_pool_num)
|
||||
self.submit_sys_task(self.__sys_pool__.__thread_monitor__)
|
||||
self.submit_sys_task(self.__admin_pool__.__thread_monitor__)
|
||||
self.submit_sys_task(self.__user_pool__.__thread_monitor__)
|
||||
|
||||
def __submit__(self, pool: Pool, fn, /, *args, **kwargs ):
|
||||
t = pool.ctl.submit(fn, *args, **kwargs)
|
||||
pool.task_list_lock.acquire()
|
||||
pool.task_list.append(t)
|
||||
pool.task_list_lock.release()
|
||||
return t
|
||||
|
||||
def submit_sys_task(self, fn, /, *args, **kwargs):
|
||||
return self.__submit__(
|
||||
self.__sys_pool__,
|
||||
fn, *args, **kwargs
|
||||
)
|
||||
|
||||
def submit_admin_task(self, fn, /, *args, **kwargs):
|
||||
return self.__submit__(
|
||||
self.__admin_pool__,
|
||||
fn, *args, **kwargs
|
||||
)
|
||||
|
||||
def submit_user_task(self, fn, /, *args, **kwargs):
|
||||
return self.__submit__(
|
||||
self.__user_pool__,
|
||||
fn, *args, **kwargs
|
||||
)
|
||||
|
||||
def shutdown(self):
|
||||
self.__user_pool__.ctl.shutdown(cancel_futures=True)
|
||||
self.__user_pool__.monitor_type = False
|
||||
self.__admin_pool__.ctl.shutdown(cancel_futures=True)
|
||||
self.__admin_pool__.monitor_type = False
|
||||
self.__sys_pool__.monitor_type = False
|
||||
self.__sys_pool__.ctl.shutdown(wait=True, cancel_futures=False)
|
||||
|
||||
def reload(self, admin_pool_num, user_pool_num):
|
||||
self.__user_pool__.ctl.shutdown(cancel_futures=True)
|
||||
self.__user_pool__.monitor_type = False
|
||||
self.__admin_pool__.ctl.shutdown(cancel_futures=True)
|
||||
self.__admin_pool__.monitor_type = False
|
||||
self.__admin_pool__ = Pool(admin_pool_num)
|
||||
self.__user_pool__ = Pool(user_pool_num)
|
||||
self.submit_sys_task(self.__admin_pool__.__thread_monitor__)
|
||||
self.submit_sys_task(self.__user_pool__.__thread_monitor__)
|
||||
Reference in New Issue
Block a user