duanpi2033 2015-05-21 09:24
浏览 37
已采纳

如何在AppEngine中使用goroutine?

I'm using Cloud Endpoints and Go and I'm trying to call a method in asynchronous way by using a goroutine.

When I'm running the following code locally I can see the debug prints but on the server it looks like the method did not get called.

I'm basically trying to do

go doStuff()

return type 
  • 写回答

1条回答 默认 最新

  • duanmen8491 2015-05-21 10:33
    关注

    The Go runtime for AppEngine supports goroutines, quoting from the doc: Go Runtime Environment: Introduction:

    The Go runtime environment for App Engine provides full support for goroutines, but not for parallel execution: goroutines are scheduled onto a single operating system thread.

    The problem is that when your HandleFunc() or Handler.ServeHTTP() returns, the AppEngine platform (and the http package too) does not wait for any goroutines started by the handler function to complete.

    Quoting from the doc: Handling Requests: Responses:

    App Engine calls the handler with a Request and a ResponseWriter, then waits for the handler to write to the ResponseWriter and return. When the handler returns, the data in the ResponseWriter's internal buffer is sent to the user.

    You have to synchronize your request handling and goroutine, and only return once the goroutine has completed its work, for example:

    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
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?