본문 바로가기
python/threading

실행 순서 구분

by Falto 2021. 4. 18.

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

댓글