如何在AppEngine中使用goroutine?

时间:2015-05-21 09:24:14

标签: google-app-engine go goroutine

我正在使用Cloud Endpoints和Go,我正试图通过使用goroutine以异步方式调用方法。

当我在本地运行以下代码时,我可以看到调试打印但在服务器上看起来没有调用该方法。

我基本上是想做

go doStuff()

return type 

1 个答案:

答案 0 :(得分:2)

AppEngine的Go运行时支持goroutines,引用文档:Go Runtime Environment: Introduction

  

App Engine的Go运行时环境提供了对goroutine的完全支持,但不支持并行执行:goroutine被安排到单个操作系统线程上。

问题是当您的HandleFunc()Handler.ServeHTTP()返回时,AppEngine平台(以及http包)不会等待以启动任何goroutines由处理函数完成。

从文档引用:Handling Requests: Responses

  

App Engine使用RequestResponseWriter调用处理程序,然后等待处理程序写入ResponseWriter并返回。处理程序返回时,ResponseWriter的内部缓冲区中的数据将发送给用户。

您必须同步请求处理和goroutine,并且只有在goroutine完成其工作后才会返回,例如:

func doStuff(done chan int) {
    // Do your stuff
    // and finally signal that you're done:
    done <- 0
}

func someHandler(w http.ResponseWriter, r *http.Request) {
    done := make(chan int)
    go doStuff(done)
    // Wait for the goroutine to complete:
    <-done
}