我可以在Google App Engine(标准环境)中使用Goroutines吗?

mat*_*tes 8 google-app-engine go

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

func MyHandler(w http.ResponseWriter, r *http.Request) {

  go func() {
    // do something ...
  }() 

  return // 200
}
Run Code Online (Sandbox Code Playgroud)

div*_*van 7

不支持超出请求的Goroutines ,但您可以使用runtime.RunInBackground在后台goroutine中执行代码:

func MyHandler(w http.ResponseWriter, r *http.Request) {

  err := runtime.RunInBackground(c, func(c appengine.Context) {
    // do something...
  })

  return // 200
}
Run Code Online (Sandbox Code Playgroud)

将使用与提供的上下文不同(并且可能超出)的背景上下文来调用所提供的函数.请注意,每个实例的同时后台请求数限制为10个.这是另一个例子.

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

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

  • @divan 迁移到 google appengine 上的 go112 后,执行此操作的方法是什么? (2认同)