Web 阻塞 API 策略

Web 阻塞 API 策略

Web 阻塞 API 策略

功能

说明 Web 请求上下文中慢 I/O、阻塞等待和长期后台能力的运行规则。

Web 请求脚本会整体进入 BT 进程级 blocking pool 执行,避免 fs、短 sleep()、模板编译、同步脚本逻辑等阻塞 Tokio Web worker。blocking pool 的线程数、队列长度和默认等待时间由 BT_IO_* 配置控制。

语法

参数

无参数。

返回值

该页面是规则说明,不提供独立函数返回值。

Web 请求规则

APIWeb 请求中行为边界
sleep(ms)允许短休眠。ms 不能超过 BT_IO_TIMEOUT_MS,默认 30000 毫秒。
pause()拒绝。Web 请求没有交互式终端。
fs.*允许。请求脚本整体运行在 blocking pool,受 BT_IO_BLOCKING_WORKERSBT_IO_BLOCKING_QUEUEBT_IO_TIMEOUT_MS 约束。
process.status() / process.output() / process.child() / process.wait()拒绝。这些操作可能同步等待外部进程或派生长期子进程。
reqwest.send()允许。使用共享 I/O runtime,单次请求默认 30000 毫秒;可用 timeout(ms) 设置,但 Web 请求整体仍受 BT_IO_TIMEOUT_MS 约束。
mysql.all() / mysql.one() / mysql.exec()允许。使用共享 I/O runtime 和 MySQL 查询超时,Web 请求整体仍受 BT_IO_TIMEOUT_MS 约束。
task(fn, ...args)允许提交后台任务。Task.on_done()Task.await()task_all()task_race() 在 Web 请求中拒绝。
device.*允许。串口打开和读写必须依赖设备配置中的超时,Web 请求整体受 BT_IO_TIMEOUT_MS 约束。

代码示例

注意事项

  • BT_IO_TIMEOUT_MS 默认 30000 毫秒,同时作为 Web 请求脚本在 blocking pool 中等待结果的默认上限。
  • 如果 blocking pool 队列已满,请求会返回明确中文错误:I/O 阻塞任务队列已满
  • 超时会让当前 HTTP 请求返回错误,但已经进入系统阻塞调用的底层操作不能被 Rust 安全强制中断;因此 Web 中仍应避免长时间外部进程和无超时设备操作。
  • 需要验证示例时,可运行 examples/web-blocking-policy/main.bt