modify: mqtt 插件返回问题
This commit is contained in:
+16
-2
@@ -33,22 +33,36 @@ auto_bind_models("example")
|
||||
# 详见 src/chongming/app/__init__.py 的 lifespan。
|
||||
|
||||
|
||||
# 幂等标记:防止 create_workers 被重复调用时重复初始化数据库等资源
|
||||
_initialized = False
|
||||
|
||||
|
||||
async def create_workers(session, config, count=1, worker_manager=None):
|
||||
"""插件入口 — 委托给 chongming_worker 运行时创建 Worker 协程"""
|
||||
global _initialized
|
||||
if _initialized:
|
||||
print("[example] create_workers 重复调用,跳过重复初始化")
|
||||
return _create_workers(session, config, count, worker_manager)
|
||||
|
||||
from .global_var import set_global_var
|
||||
from chongming_database import Database
|
||||
|
||||
|
||||
db_path = Path(config.get("data_dir", "./data")) / "example.db"
|
||||
|
||||
db = Database(db_path)
|
||||
await db.initialize()
|
||||
set_global_var("db", db)
|
||||
|
||||
_initialized = True
|
||||
return _create_workers(session, config, count, worker_manager)
|
||||
|
||||
|
||||
async def cleanup(worker_item: str):
|
||||
from .global_var import db
|
||||
global _initialized
|
||||
from .global_var import db, set_global_var
|
||||
|
||||
if db is not None:
|
||||
await db.dispose()
|
||||
set_global_var("db", None)
|
||||
_initialized = False
|
||||
print(f"{worker_item} 清理完毕")
|
||||
|
||||
+43
-8
@@ -1,22 +1,57 @@
|
||||
"""Example 插件全局运行时状态 — 统一容器
|
||||
|
||||
约定:
|
||||
- 模块只做"声明默认值",不产生任何导入期副作用
|
||||
- 所有值统一在 create_workers 中通过 set_global_var 显式写入
|
||||
- set_global_var 仅允许写入 _ALLOWED 白名单,拼写错误会立即抛错
|
||||
- require() 用于取"必须已初始化"的值,未初始化时抛清晰错误
|
||||
"""
|
||||
from typing import Any
|
||||
from .models import *
|
||||
|
||||
from chongming_database import Database
|
||||
|
||||
# 允许写入的全局变量白名单(防止拼写错误静默创建无用的新变量)
|
||||
_ALLOWED = frozenset({"db"})
|
||||
|
||||
# 显式声明所有运行时状态(默认 None,运行时由 create_workers 写入)
|
||||
db: Database | None = None
|
||||
|
||||
|
||||
def set_global_var(name: str, value: Any) -> None:
|
||||
"""
|
||||
设置当前模块的全局变量。
|
||||
|
||||
白名单校验版 setter — 设置模块级运行时状态。
|
||||
|
||||
拼错变量名会立即抛 KeyError,而不是静默创建一个无用的新变量。
|
||||
|
||||
Args:
|
||||
name: 变量名(字符串)
|
||||
name: 必须在 _ALLOWED 白名单中的变量名
|
||||
value: 任意值
|
||||
"""
|
||||
if name not in _ALLOWED:
|
||||
raise KeyError(
|
||||
f"global_var: 未知变量 '{name}'(允许: {sorted(_ALLOWED)})"
|
||||
)
|
||||
globals()[name] = value
|
||||
|
||||
|
||||
__all__ = [
|
||||
"set_global_var",
|
||||
]
|
||||
|
||||
def require(name: str) -> Any:
|
||||
"""
|
||||
获取必须已初始化的全局变量,未初始化时抛清晰错误。
|
||||
|
||||
Args:
|
||||
name: 必须在 _ALLOWED 白名单中的变量名
|
||||
|
||||
Returns:
|
||||
对应全局变量的值
|
||||
"""
|
||||
if name not in _ALLOWED:
|
||||
raise KeyError(f"global_var: 未知变量 '{name}'(允许: {sorted(_ALLOWED)})")
|
||||
value = globals().get(name)
|
||||
if value is None:
|
||||
raise RuntimeError(
|
||||
f"global_var: '{name}' 未初始化 —— 请确认插件 create_workers 已执行且配置正确"
|
||||
)
|
||||
return value
|
||||
|
||||
|
||||
__all__ = sorted(_ALLOWED) + ["set_global_var", "require"]
|
||||
|
||||
Reference in New Issue
Block a user