我可以在 Google App Engine (Standard Environment) 中使用 Goroutines



以下示例似乎有效,但使用安全吗?我的目标是做一些非常轻的后台处理(而实际的任务队列作业感觉太重了)。

func MyHandler(w http.ResponseWriter, r *http.Request) {
  go func() {
    // do something ...
  }() 
  return // 200
}
不支持比

请求更久的 Goroutine,但您可以使用运行时。RunInBackground 在后台 goroutine中执行代码:

func MyHandler(w http.ResponseWriter, r *http.Request) {
  err := runtime.RunInBackground(c, func(c appengine.Context) {
    // do something...
  })
  return // 200
}
将使用与提供的上下文

不同(并且可能比提供的上下文更持久)的背景上下文调用提供的函数。请注意,每个实例限制为 10 个同时后台请求。这是另一个例子。

请注意,支持存在于请求上下文中的 Goroutines:

适用于 App Engine 的 Go 运行时环境提供对 goroutines,但不用于并行执行:goroutines被调度 到单个操作系统线程上。此单线程限制 可能会在未来的版本中解除。可以处理多个请求 由给定实例同时进行;这意味着,如果一个请求是, 例如,等待数据存储 API 调用,另一个请求可能是 由同一实例处理。(来源)

最新更新