>source

더 큰 프로젝트를 위해 스레드 내부에서 while 루프를 사용하려고합니다. 간단하게 테스트하기 위해 더 쉬운 예제를 만들었지 만 작동하지 않습니다.

내 목표는 주 함수에 대한 스레드를 제어하고 변수가 go_thread_one False로 전환하면 스레드가 종료됩니다. 현재 두 번째 스레드는 사용되지 않고 첫 번째 스레드 만 텍스트를 인쇄합니다.

이 오류를 어떻게 수정할 수 있습니까?

다음은 내 코드의 단순화 된 버전입니다.

import time
from threading import Thread
go_thread_one = True
def first_thread():
    while go_thread_one:
        print('Thread 1')
        time.sleep(0.5)
def second_thread():
    print('Thread 2')
if __name__ == "__main__":
    t1 = Thread(target=first_thread())
    t2 = Thread(target=second_thread())
    t1.daemon = True
    t2.daemon = True
    t1.start()
    t2.start()
    time.sleep(2)
    go_thread_one = False
    print("end main Thread")

  • 답변 # 1

    우선, 다음 줄에 문제가 있습니다.

    t1 = Thread(target=first_thread())
    t2 = Thread(target=second_thread())
    
    

    호출 가능한 객체를 Thread 하지만 대신 함수를 호출하고 그 결과를 전달합니다. 그래서 당신은 심지어 만들지 않습니다 t1 ,하지만 안으로 들어가 first_thread 함수와 루프가 영원히 있습니다.

    이 문제를 해결하려면 스레드 생성을 다음과 같이 변경하십시오.

    t1 = Thread(target=first_thread)
    t2 = Thread(target=second_thread)
    
    

    다음으로

    go_thread_one = False
    
    

    원하는 효과를 내지 못할 것입니다 – 메인 스레드는 time.sleep(2) 이 줄이 없어도.

    이를 처리하기 위해 다음을 추가 할 수 있습니다.

    t1.join()
    t2.join()
    
    

  • 이전 reactjs - 여러 값에 대해 useState로 양식 반응
  • 다음 java - While 루프 로직 누락