You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gleam中实现线程/进程的休眠功能?

在Gleam中实现进程暂停的方法

Gleam本身没有提供像Python time.sleep()或JavaScript setTimeout()那样的直接内置暂停函数,但依托其运行的Erlang虚拟机(BEAM),可以通过两种方式实现需求:

1. 阻塞式暂停(类似time.sleep())

直接调用Erlang标准库的timer:sleep/1函数,让当前进程阻塞指定时长。借助Gleam的Erlang互操作能力即可实现:

import gleam/erlang
import gleam/io

pub fn main() {
  io.println("开始执行,即将暂停2秒")
  // 暂停2000毫秒(2秒)
  erlang.call("timer", "sleep", [2000])
  io.println("暂停结束,恢复执行")
}

erlang.call/3的三个参数分别对应Erlang的模块名、函数名和参数列表,timer:sleep/1会阻塞当前进程直到指定毫秒数过去。

2. 非阻塞式延迟执行(类似setTimeout())

如果需要不阻塞当前进程的延迟触发,可以结合Erlang的timer:send_after/3和Gleam的进程消息机制实现:

import gleam/erlang
import gleam/io
import gleam/process
import gleam/result

pub fn main() {
  let current_process = process.self()

  // 2秒后向当前进程发送"wake_up"消息
  erlang.call("timer", "send_after", [2000, current_process, "wake_up"])

  io.println("等待延迟消息中...")
  case process.receive() {
    Ok("wake_up") -> io.println("延迟时间到,继续执行")
    Ok(unknown) -> io.println("收到未知消息: " <> unknown)
    Error(err) -> io.println("接收消息失败: " <> result.error_to_string(err))
  }
}

这种方式不会阻塞进程,进程可以在等待消息期间处理其他任务,直到指定时间后收到唤醒消息再执行后续逻辑。

便捷封装

你可以自己封装一个sleep函数来简化调用:

import gleam/erlang

// 封装阻塞式暂停函数
pub fn sleep(milliseconds: Int) {
  erlang.call("timer", "sleep", [milliseconds])
}

// 使用示例
pub fn main() {
  sleep(2000)
}

内容的提问来源于stack exchange,提问作者Ruslan Ustitc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:32:08