> 백엔드 개발 > Golang > 고루틴을 사용하여 Go에서 장기 실행 프로세스에 대한 사용 중 표시기를 만드는 방법은 무엇입니까?

고루틴을 사용하여 Go에서 장기 실행 프로세스에 대한 사용 중 표시기를 만드는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-25 16:36:47
원래의
457명이 탐색했습니다.

How to create busy indicators for long-running processes in Go using goroutines?

실행된 프로세스에 대한 사용 중 표시 만들기

오랜 시간이 걸리는 하위 프로세스를 실행할 때 이를 알 수 있는 방법을 사용자에게 제공하는 것이 중요합니다. 프로세스가 실제로 실행 중이라는 것입니다. 표시기가 없으면 사용자는 진행 상황을 인식하지 못하거나 시스템이 응답하지 않는다고 생각할 수도 있습니다.

이 문제를 해결하기 위해 다양한 통화 중 표시기를 구현하여 사용자에게 시각적 신호를 제공할 수 있습니다. 그러한 표시기 중 하나는 콘솔에 점이나 진행률 표시줄과 같은 문자를 주기적으로 인쇄하는 것입니다.

사용 중 표시기에 고루틴 사용

고루틴은 경량 스레드입니다. 통화 중 표시기 관리를 담당하는 별도의 스레드를 생성하는 데 사용할 수 있는 Go 프로그래밍 언어입니다. 이를 수행하는 방법은 다음과 같습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<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를 닫아 표시기() 고루틴을 종료하고 점 인쇄를 중지합니다.

통화 표시 사용자 정의

통화 표시는 다음을 수행할 수 있습니다. 인쇄 속도를 조정하거나 다른 문자나 패턴을 추가하여 추가로 사용자 정의할 수 있습니다. 예를 들어, 1초마다 점을 인쇄하고 5개 점마다 새 줄을 인쇄하려면 표시기() 함수를 다음과 같이 수정할 수 있습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<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>

로그인 후 복사

응용 프로그램에 통화 중 표시기를 통합하면 다음을 제공할 수 있습니다. 응답성이 뛰어나고 사용자 친화적인 환경을 제공하여 사용자가 결과를 기다리는 동안 프로세스가 백그라운드에서 실행되고 있음을 보장합니다.

위 내용은 고루틴을 사용하여 Go에서 장기 실행 프로세스에 대한 사용 중 표시기를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿