1번째 코드
from threading import Thread
import time
def f():
global a
a = 1
thread = Thread(target=f)
thread.start()
a = 2
time.sleep(1)
print(a)
# 출력 결과
2
위 코드를 순서대로 분석해보자.
(1~2) 모듈 불러오기
(3~5) 함수 f는 전역 변수 a에 1이라는 값을 넣는다.
(6~7) 함수 f를 target으로 정한 thread를 시작한다.
(8) 그리고 전역 변수 a에 2라는 값을 넣는다.
(9~10) 1초 쉰 다음, 전역 변수 a에 무슨 값이 담겨졌는지가 출력된다.
마지막에 1초를 쉬는 이유는 스레드가 실행되는 시간을 충분히 기다리기 위함이다.
2번째 코드
from threading import Thread
import time
def f():
print('faltostorage')
global a
a = 1
thread = Thread(target=f)
thread.start()
a = 2
time.sleep(1)
print(a)
# 출력 결과
faltostorage
1
1번째 코드의 함수 f에 print('faltostorage')를 추가한 코드이다.
print('faltostorage')는 a라는 전역 변수에 아무런 영향을 끼치지 않을 것이기 때문에, 1번째 코드와 같은 결과가 나올 것이다.
그런데 2번째 코드의 a는 1이다. 이게 어떻게 된 일일까? 나도 몰라요
import time
a = time.time()
print('faltostorage')
print(time.time()-a)
# 출력 결과
faltostorage
0.0009989738464355469
print('faltostorage')라는 한 줄 짜리 코드가 실행되는 시간은 0.0009초이다.
추측해보건대 print 함수를 추가함으로써 함수 f가 전역 변수 a에 1을 넣는 시간이 a에 2를 넣는 시간보다 더 늦어져서 최종적으로 a가 1이 된 것이 아닐까?
1줄 요약: thread 쓸 때는 time.sleep을 이용해서 실행 순서 구분을 명확히 하자.
'python > threading' 카테고리의 다른 글
Thread 내에서 프로세스 종료하기 (0) | 2021.04.18 |
---|
댓글