728x90
๋ฐ์ํ
๐ ๋ณธ ๊ฒ์๊ธ์ Python 3.11.0 ํ๊ฒฝ์์ ์์ฑ๋์์ต๋๋ค!
์ฌ๋ฌ๊ฐ์ง ์์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํด ํจ์ฌ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
Multi-Processing
4๊ฐ์ ์์ ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ, ๋ฉํฐ ํ๋ก์ธ์ฑ์ ํตํด ๋ณ๋ ฌ๋ก 4๊ฐ์ ์์ ์ ๋์์ ์ฒ๋ฆฌ ํ ์ ์๋ค.
๋ฉํฐ ํ๋ก์ธ์ฑ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๋๋์ด ์์ ์ ์ฒ๋ฆฌํ๋ค.
- ์์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ ํ์ฌ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์์ ์ ์ด๋ค.
- ๊ฐ๋ณ์ ์ผ๋ก ์์์ ์ ์ ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์์ค ์๊ตฌ๋์ด ํฌ๋ค.
ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ์๋ CPU Core์ ๊ฐ์์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
import time
from multiprocessing import Pool
def cpu_intensive_task(n):
result = 0
for i in range(n):
result += i ** 2
return result
if __name__ == "__main__":
start_time = time.time()
results = []
for _ in range(4): # 4๊ฐ์ ์์
์ ์์ฐจ์ ์ผ๋ก ์ํ
result = cpu_intensive_task(10**6)
results.append(result)
end_time = time.time()
print("Results:", results)
print("Sigle Processing:", end_time - start_time)
start_time = time.time()
with Pool(processes=4) as pool: # 4๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑ
results = pool.map(cpu_intensive_task, [10**6] * 4) # 4๊ฐ์ ์์
์ ๋ณ๋ ฌ๋ก ์ํ
end_time = time.time()
print("Results:", results)
print("Multi processing:", end_time - start_time)
Multi-Threading
I/O ์์ ์ ์ฌ๋ฌ๊ฐ ํด์ผํ ๋๋ ๋ฉํฐ ์ฐ๋ ๋ฉ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ฉํฐ ์ฐ๋ ๋ฉ์ ํ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ ์ ์๊ฒ ๋๋ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค.
- ์์์ ๊ณต์ (ํ๋์ ๋ฉ๋ชจ๋ฆฌ)ํ๊ธฐ ๋๋ฌธ์ ํ๋์ ์์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ์์ ๋ ์ํฅ์ ๋ฐ๋๋ค.
import time
import threading
def io_intensive_task(n):
time.sleep(n) # I/O ์์
์ ์๋ฎฌ๋ ์ด์
(n์ด ๋๊ธฐ)
print(f"Task {n} completed")
if __name__ == "__main__":
start_time = time.time()
for i in range(1, 5): # 1์ด, 2์ด, 3์ด, 4์ด ๋๊ธฐ ์์
io_intensive_task(i)
end_time = time.time()
print("Single-Threading:", end_time - start_time)
start_time = time.time()
threads = []
for i in range(1, 5): # 1์ด, 2์ด, 3์ด, 4์ด ๋๊ธฐ ์์
thread = threading.Thread(target=io_intensive_task, args=(i,))
threads.append(thread)
thread.start() # ์ค๋ ๋ ์์
for thread in threads:
thread.join() # ๋ชจ๋ ์ค๋ ๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ
end_time = time.time()
print("Multi-Threading:", end_time - start_time)
์ด ๋๊ฐ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ ์ ํ ์กฐํฉํ๋ฉด ํจ์ฌ ๋น ๋ฅธ ์๊ฐ์ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
import time
import multiprocessing
import threading
def io_intensive_task(n):
time.sleep(n) # I/O ์์
์ ์๋ฎฌ๋ ์ด์
(n์ด ๋๊ธฐ)
print(f"Thread Task {n} completed")
def process_function(num_threads):
threads = []
for i in range(1, num_threads + 1):
thread = threading.Thread(target=io_intensive_task, args=(i,))
threads.append(thread)
thread.start() # ์ค๋ ๋ ์์
for thread in threads:
thread.join() # ๋ชจ๋ ์ค๋ ๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ
if __name__ == "__main__":
start_time = time.time()
num_tasks = 6 # ์ด ์์
์
for i in range(1, num_tasks + 1):
io_intensive_task(i) # ๊ฐ ์์
์คํ
end_time = time.time()
print(f"Default: {end_time - start_time:.4f}")
start_time = time.time()
num_processes = 2 # ํ๋ก์ธ์ค ์
num_threads_per_process = 3 # ๊ฐ ํ๋ก์ธ์ค์์ ์คํํ ์ค๋ ๋ ์
processes = []
for _ in range(num_processes):
process = multiprocessing.Process(target=process_function, args=(num_threads_per_process,))
processes.append(process)
process.start() # ํ๋ก์ธ์ค ์์
for process in processes:
process.join() # ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ
end_time = time.time()
print(f"multiprocessing and multithreading:{end_time - start_time:.4f}")
728x90
๋ฐ์ํ
'Langauge > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Python๊ณผ C++ ์ฐ๋ (0) | 2024.09.25 |
---|---|
[Python] ์ฐ์ฐ ์๋ ์ฌ๋ฆฌ๊ธฐ - Numba (0) | 2024.09.13 |
[Python] ์ฐ์ฐ ์๋ ์ฌ๋ฆฌ๊ธฐ - ํ๋กํ์ผ๋ง(Profiling) (0) | 2024.09.13 |
[Python] ์ฐ์ฐ ์๋ ์ฌ๋ฆฌ๊ธฐ - ๋ด์ฅ ํจ์ ์ฌ์ฉ (0) | 2024.09.13 |
[Python] ์ฐ์ฐ ์๋ ์ฌ๋ฆฌ๊ธฐ - ๊ฐ์ ๋ฐ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ (0) | 2024.09.12 |