我正在使用雲端點,並且我試圖通過使用goroutine以異步方式調用方法。如何在AppEngine內部使用goroutine?
當我在本地運行下面的代碼時,我可以看到調試打印,但在服務器上它看起來像方法沒有被調用。
基本上,我試圖做
go doStuff()
return type
我正在使用雲端點,並且我試圖通過使用goroutine以異步方式調用方法。如何在AppEngine內部使用goroutine?
當我在本地運行下面的代碼時,我可以看到調試打印,但在服務器上它看起來像方法沒有被調用。
基本上,我試圖做
go doStuff()
return type
Go運行時應用服務引擎支持夠程,從文檔報價:Go Runtime Environment: Introduction:
App Engine的Go運行時環境提供全面支持goroutines,但不適用於並行執行:goroutines被安排在單個操作系統線程上。
的問題是,當你的HandleFunc()
或Handler.ServeHTTP()
返回時,應用服務引擎平臺(和http
包過)不等待由處理函數開始完成任何夠程。
從文檔報價:Handling Requests: Responses:
App Engine的調用與
Request
和ResponseWriter
處理程序,然後等待處理程序寫入ResponseWriter
和回報。處理程序返回時,ResponseWriter
的內部緩衝區中的數據將發送給用戶。
必須同步您的請求處理和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
}
你能提供有關您的代碼的更多細節?根據[docs](https://cloud.google.com/appengine/docs/go/),*「App Engine的Go運行時環境全面支持goroutines,但不支持並行執行」*。從文檔不清楚,但[託管虛擬機](https://cloud.google.com/appengine/docs/go/managed-vms/)可能沒有相同的限制。 – tx802