HOWTO · Python
Python에서 프로그램 일시 중지
이 자습서에서는 Python에서 프로그램을 일시 중지하는 방법을 설명합니다.
이 페이지의 내용
Python 프로그램을 일시 중지하려면 필요한 동작에 맞는 방법을 선택하세요. 정해진 시간 동안 기다리려면 time.sleep()을, 콘솔에서 사용자 입력을 기다리려면 input()을, 한 스레드가 기다리는 동안 다른 스레드를 계속 실행하려면 threading을 사용합니다. 셸 일시 중지 명령은 Windows 콘솔에서만 사용할 수 있어 이식성이 없습니다. 예제 코드와 출력 블록은 원문과 바이트 단위로 동일하게 유지되므로, 그 안의 화면 표시 문구와 출력 문자열은 영어로 표시됩니다.
time.sleep()으로 정해진 시간 동안 일시 중지
time 모듈을 가져온 다음 time.sleep(seconds)를 호출하면 호출한 스레드가 초 단위로 지정한 시간 동안 일시 중지됩니다. 대기가 끝나면 다음 문장부터 실행이 계속됩니다.
다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import time
print("Starting a short pause.")
time.sleep(0.1)
print("The program continues.")
요청한 시간은 정확한 실행 시점을 보장하지 않습니다. 운영 체제가 요청한 시간보다 늦게 스레드를 다시 실행할 수 있으므로, 정밀한 일정 관리가 아니라 지연을 줄 때 사용하세요. 스레드가 잠들어 있는 동안에는 그 스레드가 자체 작업을 수행할 수 없지만, 다른 스레드는 계속 실행될 수 있습니다.
input()으로 사용자 입력 기다리기
콘솔 프로그램이 사용자의 입력을 기다려야 할 때는 input()을 사용하세요. 이 함수는 선택적으로 프롬프트를 표시하고 한 줄을 읽은 뒤 입력된 텍스트를 반환합니다. 반환값을 변수에 저장하지 않고 호출하면 Enter 키를 누르는 것처럼 어떤 입력이든 프로그램을 계속 진행시키는 데 유용합니다. 아래 예제는 파일 끝(EOF) 상황을 처리하므로 대화형 콘솔 없이 실행해도 정상적으로 끝납니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
try:
input("Press Enter to continue: ")
except EOFError:
pass
입력 내용이 필요하다면 반환된 문자열을 저장해 프로그램에서 사용하세요. 이 예제도 입력이 리디렉션되거나 콘솔 입력을 사용할 수 없을 때 발생할 수 있는 파일 끝(EOF) 상황을 처리합니다.
try:
name = input("Your name: ")
except EOFError:
name = "guest"
print(f"Hello, {name}.")
input()은 콘솔에서 한 줄 입력을 기다리는 함수입니다. 백그라운드 서비스나 그래픽 애플리케이션의 이벤트 루프를 일반적으로 일시 중지하는 방법은 아닙니다.
재사용 가능한 시간 지정 일시 중지 함수 만들기
지연을 반복해서 사용한다면 호출을 작은 도우미 함수에 넣으세요. 같은 스크립트에서 time을 가져오고, 함수를 호출할 때마다 원하는 시간을 초 단위로 전달합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import time
def pause_for(seconds):
time.sleep(seconds)
pause_for(0.1)
print("Ready.")
이 도우미 함수는 호출하는 코드를 간결하게 유지하면서 time.sleep()의 동작을 그대로 따릅니다. 즉, 함수를 호출한 스레드가 일시 중지됩니다. 주변 프로그램에 필요한 경우에만 입력값 검증이나 로깅 정책을 추가하세요.
다른 작업은 계속하면서 한 스레드 일시 중지
작업자 함수 안에서 잠들면 프로세스의 모든 스레드가 아니라 해당 작업자 스레드만 일시 중지됩니다. 지연 시간 동안 메인 스레드는 다른 작업을 할 수 있습니다. 그런 다음 join()을 호출하면 작업자 스레드가 끝날 때까지 기다립니다. join() 자체가 프로세스를 일시 중지하거나 관계없는 스레드를 멈추는 것은 아닙니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import threading
import time
def worker():
time.sleep(0.1)
print("Worker finished.")
thread = threading.Thread(target=worker)
thread.start()
print("Main thread continues.")
thread.join()
print("Worker has been joined.")
프로그램의 다른 부분이 작업 완료를 기다려야 한다면 스레드 간 동기화를 사용하세요. 종료 시점이 정해지지 않은 동기화 대기에는 임의로 긴 시간 동안 잠드는 대신 이벤트 같은 동기화 프리미티브를 사용하세요. sleep은 지정한 시간이 지난 뒤에야 다시 확인합니다.
Windows 콘솔에서만 os.system(“pause”) 사용
Windows에서 os.system("pause")를 호출하면 명령 처리기가 pause 명령을 실행하도록 요청합니다. 이 호출은 Windows 콘솔과 외부 셸에 의존하므로 이식 가능한 Python 일시 중지 방법이 아니며, 콘솔이 연결되어 있지 않으면 예상대로 동작하지 않을 수 있습니다. 콘솔 프롬프트에는 input()을 사용하고, 작업 조정에는 threading 동기화 프리미티브를 사용하세요. 이 플랫폼 종속 호출은 모든 환경에서 실행할 수 없으므로 코드 안에 그대로 표시합니다.
상황에 맞는 일시 중지 방법 선택
- 프로그램이 정해진 시간 동안 지연되어야 한다면
time.sleep(seconds)를 사용합니다. - 사용자가 콘솔 프로그램을 언제 계속할지 결정해야 한다면
input()을 사용합니다. - 한 스레드가 다른 스레드나 신호를 기다려야 한다면
threading동기화를 사용합니다. - 셸 명령이 꼭 필요한 Windows 콘솔 스크립트에서만
os.system("pause")를 사용합니다.
각 방법은 서로 다른 대상을 기다리게 합니다. 시간 지연은 호출한 스레드를 일시 중지하고, 콘솔 입력은 사용자가 한 줄을 입력하기를 기다리며, 동기화는 동시 실행 중인 프로그램의 다른 부분을 기다립니다. 무엇이 실행을 다시 시작해야 하는지, 여러 플랫폼에서 프로그램을 실행해야 하는지를 기준으로 방법을 선택하세요.