Google App Engine (スタンダード環境) でゴルーチンは HTTP リクエストを超えて存続できますか?
Google App Engine のスタンダード環境では、次のことが可能であるように思われるかもしれません。 HTTP リクエストが処理された後も実行を続けるゴルーチンを作成します。ただし、このアプローチでは問題が発生する可能性があります。
func MyHandler(w http.ResponseWriter, r *http.Request) { go func() { // do something ... }() return // 200 }
回答:
リクエストを超えて存続する Goroutine は、App Engine のスタンダード環境ではサポートされていません。代わりに、 runtime.RunInBackground を使用して、バックグラウンドの goroutine でコードを実行します。提供された関数は、リクエスト コンテキストとは異なるバックグラウンド コンテキストを受け取ります。インスタンスごとのバックグラウンド リクエストの同時実行数は 10 に制限されていることに注意することが重要です。
func MyHandler(w http.ResponseWriter, r *http.Request) { err := runtime.RunInBackground(c, func(c appengine.Context) { // do something... }) return // 200 }
あるいは、リクエストのコンテキスト内で存在するゴルーチンもサポートされています。ただし、App Engine のランタイム環境は、単一のオペレーティング システム スレッド上のゴルーチンのみをサポートするため、並列実行は発生しません。
以上がGoroutines は Google App Engine (スタンダード環境) で HTTP リクエストを超えて存続できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。