【问题标题】:Can I use Goroutines in Google App Engine (Standard Environment)?我可以在 Google App Engine(标准环境)中使用 Goroutines 吗?
【发布时间】:2015-01-26 22:06:13
【问题描述】:

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

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

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

  return // 200
}

【问题讨论】:

标签: google-app-engine go


【解决方案1】:

不支持超过请求的 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 个后台请求。这里是another example

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

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

【讨论】:

  • 根据this,您所说的似乎是错误的。我错过了什么吗?
  • 你可以使用 goroutines。要访问 appengine 服务,您需要后台上下文,(仍然)可通过调用 appengine.RunInBackground 获得。
  • @divan 在 google appengine 上迁移到 go112 后会有什么方法?
猜你喜欢
  • 1970-01-01
  • 2019-10-27
  • 2018-10-07
  • 2019-05-30
  • 2018-03-12
  • 2018-07-01
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
相关资源
最近更新 更多