Files
chongming-core/workers/demo/__init__.py
T

42 lines
1.5 KiB
Python

"""
Demo 进程插件 — 独立进程运行示例
与 inline 插件(src/plugins/)结构完全一致,区别仅在运行方式:
- config/workers/demo/config.toml 声明 load_mode = "external"、module = "workers.demo"
- 由 Docker/K8s 编排拉起独立进程: uv run worker_serve --type demo
- 启动流程: 自读 TOML → 进程内契约校验 → create_workers →
经 Zenoh 发布路由描述符(网关 RouteRegistry 动态挂载 HTTP 路由)→
每 10s 周期重发布自愈 → SIGTERM 时摘除路由并 cleanup
"""
import logging
from chongming_worker.plugin import Plugin
from .router import * # noqa: F401,F403 触发 @rpc_method 注册
logger = logging.getLogger(__name__)
class DemoPlugin(Plugin):
"""Demo 插件 — 无数据库的进程插件最小示例。"""
type = "demo"
db_name = None # 无数据库
auto_bind = True # 自动绑定 models/pydantic.py(支持 workers/ 路径)
async def on_init(self):
"""首次 create_workers 时调用一次:读取插件私有配置。"""
prefix = self.config.get("greeting_prefix", "Hello")
self.set_var("greeting_prefix", prefix)
logger.info("[demo] 初始化完成 (greeting_prefix=%s)", prefix)
async def on_cleanup(self):
"""cleanup 时调用(无外部资源需要释放)。"""
logger.info("[demo] 清理完成")
# 暴露给 worker_serve 的模块级入口(签名与 inline 插件一致)
plugin = DemoPlugin()
create_workers = plugin.create_workers
cleanup = plugin.cleanup