実行されたプロセスのビジー インジケーターの作成
長時間かかる子プロセスを実行する場合、それを知る方法をユーザーに提供することが重要ですプロセスが実際に実行されていることを確認します。インジケーターがないと、ユーザーは進行状況に気づかないか、システムが応答しなくなったとさえ思う可能性があります。
この問題に対処するために、さまざまなビジー インジケーターを実装して、ユーザーに視覚的な合図を提供できます。このようなインジケーターの 1 つは、ドットや進行状況バーなどの文字をコンソールに定期的に出力することです。
ビジー インジケーターに Goroutine を使用する
Goroutine は、 Go プログラミング言語。ビジー インジケーターの管理を担当する別のスレッドを作成するために利用できます。これを実現する方法は次のとおりです。
<code class="go">func indicator(shutdownCh <-chan struct{}) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for { select { case <-ticker.C: fmt.Print(".") case <-shutdownCh: return } } } func main() { cmd := exec.Command("npm", "install") log.Printf("Running command and waiting for it to finish...") // Start indicator: shutdownCh := make(chan struct{}) go indicator(shutdownCh) err := cmd.Run() close(shutdownCh) // Signal indicator() to terminate fmt.Println() log.Printf("Command finished with error: %v", err) }</code>
この例では、コンソールにドットを定期的に出力する、indicator() という名前のゴルーチンが作成されます。ゴルーチンは、shutdownCh チャネルから信号を受信するまで印刷を続けます。子プロセスが完了すると、メインのゴルーチンが shutdownCh を閉じ、indicator() ゴルーチンが終了してドットの印刷が停止されます。
ビジー インジケーターのカスタマイズ
ビジー インジケーターは次のことができます。印刷速度を調整したり、別の文字やパターンを追加したりして、さらにカスタマイズできます。たとえば、1 秒ごとにドットを出力し、5 ドットごとに新しい行を出力するには、indicator() 関数を次のように変更できます。
<code class="go">func indicator(shutdownCh <-chan struct{}) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for i := 0; ; { select { case <-ticker.C: fmt.Print(".") if i++; i%5 == 0 { fmt.Println() } case <-shutdownCh: return } } }</code>
アプリケーションにビジー インジケーターを組み込むことで、以下を提供できます。ユーザーは、結果を待っている間もプロセスがバックグラウンドで実行されることを保証し、より応答性が高く使いやすいエクスペリエンスを実現します。
以上がgoroutinesを使用してGoで長時間実行プロセスのビジーインジケーターを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。