| name | py-init |
| description | 在我的世界 MOD Python 开发中,注意 import 具有初始化语义;涉及客户端/服务端和线程安全时,不要跨线程导入或初始化不该加载的模块。仅对明确安全的跳板封装库做受控导入。 |
Python 初始化与线程边界
用于客户端/服务端分离、线程安全、模块导入相关场景。
规则:
import 不只是取符号,也可能触发模块初始化
- 不要跨线程导入或初始化不该在线程中加载的模块
- 不要在客户端线程初始化服务端对象,也不要在服务端线程初始化客户端对象
- 客户端/服务端边界不清时,先收窄导入范围,再确认初始化时机
- 只有明确安全的跳板封装库,才可只导入不调用
原因:
- Python 模块导入带有初始化语义
- MC 客户端/服务端对象常带线程和环境边界
- PyModSdk 基于多线程 GIL 轮换,不是独立子解释器;同机客户端与服务端对象不是各自独立副本
- 错误线程上的初始化可能导致隐藏错误、状态污染或崩溃
例外说明:
import mod.server.extraServerApi as serverApi
import mod.client.extraClientApi as clientApi
这类跳板封装通常只在实际调用内部接口时才进入对应侧初始化逻辑;仅导入本身可接受,但前提是不要在错误线程或错误侧继续调用其内部能力。
要求:
- 先确认当前代码运行在线程、客户端还是服务端
- 初始化放在正确侧、正确线程、正确生命周期里
- 不要假设客户端和服务端各自持有一份完全独立的 Python 对象副本
- 边界不明确时,不要为了方便把导入提前到公共线程或公共入口