以下示例似乎有效,但使用起来安全吗?我的目标是做一些非常简单的后台处理(而实际的任务队列工作感觉太重了)。func MyHandler(w http.ResponseWriter, r *http.Request) { go func() { // do something ... }() return // 200}
1 回答
慕仙森
TA贡献1827条经验 获得超7个赞
不支持超过请求的Goroutine ,但您可以使用runtime.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 运行时环境完全支持 goroutine,但不支持并行执行:goroutine 被调度到单个操作系统线程上。这个单线程限制可能会在未来的版本中取消。一个给定的实例可以同时处理多个请求;这意味着,如果一个请求正在等待数据存储 API 调用,则另一个请求可能会由同一实例处理。(来源)
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报
0/150
提交
取消