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)
不支持超出请求的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调用,则另一个请求可能由同一实例处理.(来源)