Python에서 `Thread.start()`를 호출하기 전에 내 스레드가 실행되는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-10 08:11:02
원래의
641명이 탐색했습니다.

Why Does My Thread Run Before Calling `Thread.start()` in Python?

Thread.start를 호출하기 전에 스레드가 실행되기 시작합니다.

Python에서 스레딩을 사용하면 단일 프로그램 내에서 여러 스레드를 생성하고 실행할 수 있습니다. 일반적인 오해는 Thread.start()를 명시적으로 호출하지 않고도 스레드가 생성된 후 즉시 실행되기 시작한다는 것입니다. 그러나 그렇지 않습니다.

다음 코드 조각을 고려하십시오.

import threading

t1 = threading.Thread(target=self.read())
print("something")
t2 = threading.Thread(target=self.runChecks(), args=(self,))
로그인 후 복사

이 예에서는 두 개의 스레드 t1 및 t2가 생성되었지만 둘 다 아직 시작되지 않았습니다. self.read() 함수는 무한정 실행됩니다. 이는 프로그램이 결코 인쇄 라인에 도달하지 않음을 의미합니다. 이 동작은 스레드를 시작한 후 다음 줄로 진행하도록 예상되는 t1.start()를 호출하지 않음에도 불구하고 발생합니다.

이 예상치 못한 동작의 이유는 target=self 뒤의 괄호에 있습니다. 읽다(). 이 구문은 실제로 self.read() 함수를 즉시 호출하고 반환 값을 대상 인수로 Thread 생성자에 전달합니다. Python은 함수가 대상으로 전달될 것으로 예상하므로 해결책은 후행 괄호를 제거하고 명시적으로 t1.start()를 호출하여 스레드를 시작하는 것입니다.

import threading

t1 = threading.Thread(target=self.read)
t1.start()
print("something")
로그인 후 복사

또는 대상 함수에 인수가 필요한 경우 , threading.Thread에 args 및 kwargs 인수를 사용하거나 생성자에 전달할 람다 함수를 정의할 수 있습니다. 람다를 사용하기로 선택한 경우 람다가 정의될 ​​때가 아니라 스레드가 예약될 때 함수와 해당 인수를 조회한다는 점을 기억하십시오. 스레드 실행이 시작되기 전에 변수를 다시 할당하면 예상치 못한 결과가 발생할 수 있습니다.

위 내용은 Python에서 `Thread.start()`를 호출하기 전에 내 스레드가 실행되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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