58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
"""多 worker 集成测试 fixture 应用入口
|
||
|
||
通过 subprocess 启动:python main.py
|
||
环境变量:
|
||
MW_PORT 监听端口(必需)
|
||
MW_WORKERS worker 数量(默认 2)
|
||
MW_HOOK_DIR worker 钩子记录目录
|
||
MW_JOB_DIR 调度任务记录目录
|
||
|
||
注意:本模块在 Windows spawn 模式下会被 multiprocessing 以 __mp_main__
|
||
重新导入,模块级代码(路径注入、配置覆盖)会在每个 worker 中重新执行,
|
||
这是预期行为;app.run() 受 __main__ 守卫保护只在父进程执行。
|
||
"""
|
||
|
||
import os
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
FIXTURE_DIR = Path(__file__).parent.absolute()
|
||
REPO_ROOT = FIXTURE_DIR.parent.parent.parent.parent
|
||
|
||
# 确保能导入 mwapp 包与源码版 myboot
|
||
sys.path.insert(0, str(FIXTURE_DIR))
|
||
if str(REPO_ROOT) not in sys.path:
|
||
sys.path.insert(0, str(REPO_ROOT))
|
||
|
||
from myboot.core import auto_configuration # noqa: E402
|
||
from myboot.core.application import Application # noqa: E402
|
||
|
||
app = Application(
|
||
name="multiworker-fixture",
|
||
auto_configuration=True,
|
||
auto_discover_package="mwapp",
|
||
)
|
||
|
||
# 自动配置管理器默认把 myboot 源码仓库根当作 app_root,
|
||
# 这里指向 fixture 目录,使 "mwapp" 包能被发现;
|
||
# 禁用缓存避免在仓库中残留 .myboot_cache_*.json
|
||
auto_configuration._auto_configuration_manager.app_root = str(FIXTURE_DIR)
|
||
auto_configuration._auto_configuration_manager.use_cache = False
|
||
|
||
PORT = int(os.environ.get("MW_PORT", "8765"))
|
||
WORKERS = int(os.environ.get("MW_WORKERS", "2"))
|
||
|
||
# 显式覆盖配置——仓库 conf/config.yaml(server.workers=1 等)的优先级
|
||
# 高于 run() 入参,必须在配置层覆盖
|
||
app.config.set("server.host", "127.0.0.1")
|
||
app.config.set("server.port", PORT)
|
||
app.config.set("server.workers", WORKERS)
|
||
|
||
if __name__ == "__main__":
|
||
app.run(
|
||
host="127.0.0.1",
|
||
port=PORT,
|
||
workers=WORKERS,
|
||
app_path="main:app.get_fastapi_app()",
|
||
)
|