SuperAPI AI 工具集

file-ipc-patterns

通用与其它

查看项目

更新于 10-16 09:32

技能介绍

用途:当多个进程(如 Web 服务与容器工作进程、宿主进程与子进程)不共享内存且不愿引入消息代理时,用文件系统充当消息总线,完成消息交换与事件流式传输。资料称该模式已在多个 Python CLI 工具与 Web 服务中经生产验证。

主要能力:

  1. 事件与状态分离。events.jsonl 采用追加写、每行一个 JSON 对象,写入后立即 flush 以便 tail -f 实时查看;state.json 通过 os.replace 原子覆盖,始终是完整状态快照,便于快速读取而无需扫描全日志。
  2. 跨进程消息。采用“每请求一个文件”约定,在 input-requests 目录下写入 JSON 请求文件;调用方获得 asyncio.Future,响应到达时用 call_soon_threadsafe 在正确的 event loop 上安全解析。
  3. SSE 投递。EventBus 按 instance_id 维护订阅队列,publish 使用 put_nowait,队列满则丢弃事件而不阻塞;发布 None 作为流结束哨兵。
  4. 文件尾随流式读取。mirror 循环按 offset 增量读取源文件新行并追加到宿主侧文件,SSE 端点再增量读取,并在检测到终态时关闭流。

必要用法要点:emit 需在锁内追加并每行 flush;update_state 先用 mkstemp 写临时文件再 replace,失败时清理临时文件;request_input 需校验 request_id 为安全文件名以防路径穿越。

限制与注意事项:_pending 字典未加锁,依赖 CPython GIL 下 dict.pop 的原子性,属于为简洁而做的取舍;Python 3.13+ free-threaded 模式不再保证该行为,需自行加锁。JSONL 使用紧凑分隔符以减小体积,请求文件用 indent=2 便于调试。事件流需依赖显式 flush 才能实时;EventBus 队列满会丢事件。

适用场景:容器与宿主间事件镜像、CLI 工具的进度与状态输出、需要人类介入的输入请求/响应、以 SSE 向前端推送进程事件。

暂未提供:具体安装命令、依赖版本要求、许可与收费信息。