프로그래밍의 기초인 출력문 연구했다.
'2025년7월6일'을 20250706번(2천만번 이상) 출력하는 것을 가장 빠르게 하는 것을 목표로 한다.
내 컴퓨터는 AMD Ryzen 5 PRO 8540U, 32기가 램이다.
1. 가장 기본적인 방법이다. 파이썬을 배운 사람이라면 누구나 적을 코드이다. 반복문을 사용하였다. 약29분45초 걸렸다.
import time
start_time = time.time()
for i in range(20250706):
i += 1
print('2025년7월6일',i)
end_time = time.time()
a = end_time - start_time
print(a)
#1785.0897858142853
2. sys.stdout.write()을 사용하여 시간을 줄인 코드이다. 알고리즘 문제(백준,코드업 등)을 풀 때 시간초과가 뜨면 사용하는 것 이다.약3분14초 걸렸다
import time
import sys
start_time = time.time()
buffer = [] # 문자열을 담을 리스트
for i in range(1, 20250707):
buffer.append(f'2025년7월6일 {i}')
sys.stdout.write('\n'.join(buffer) + '\n') # 한번에 출력 (print보다 빠름)
end_time = time.time()
print(end_time - start_time)
#194.26599669456482
3. 병렬처리를 이용한 방법이다. 병렬 처리는 CPU의 코어를 최대한으로 활용하는 방법이다. 병렬처리는 여러개의 프로세스를 만든 후 각 프로세스로 작업을 분담하여 처리하는 방법이다. 이것을 그림으로 표현하자면 이렇다.
[작업 분배]
입력 데이터: [1, 2, 3, 4, 5, 6, ..., 20250706]
[Pool]
┌────────────┬────────────┬────────────┬────────────┐
│ 프로세스 1 │ 프로세스 2 │ 프로세스 3 │ 프로세스 N │
└────────────┴────────────┴────────────┴────────────┘
│ │ │ │
▼ ▼ ▼ ▼
make_line(1~5000) make_line(5001~10000) ... 병렬 실행
[결과 모음 + 정렬된 반환]
['2025년7월6일 1', '2025년7월6일 2', ..., '2025년7월6일 20250706']
약 2분43초가 걸렸다.
import time
from multiprocessing import Pool, cpu_count
import sys
# 출력 형식 생성 함수
def make_line(i):
return f'2025년7월6일 {i}'
if __name__ == "__main__":
start_time = time.time()
COUNT = 20250706
CPU_CORES = cpu_count() # 사용 가능한 CPU 수
with Pool(CPU_CORES) as pool:
# map은 순서를 보장하면서 병렬 처리
lines = pool.map(make_line, range(1, COUNT + 1))
# 한 번에 출력 (print보다 빠름)
sys.stdout.write('\n'.join(lines) + '\n')
end_time = time.time()
print(end_time - start_time)
#163.25601887702942
병렬처리가 가장 빠른 방법인 것을 알 수 있다. sys함수와 병렬처리에서 메모리는 약 4기가에서 5기가 정도를 사용한다.
'python' 카테고리의 다른 글
| python openCV와 MediaPipe를 활용한 실시간 손가락 인식 (0) | 2025.02.15 |
|---|