프로그래밍의 기초인 출력문 연구했다.

'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

+ Recent posts