본문 바로가기
-----ETC2-----/고급 프로그래밍 기술

[고급 프로그래밍] Week 1: 멀티 스레딩 (Multithreading)

by cogito21_python 2024. 6. 2.
반응형

Day 1: 멀티 스레딩 개요

  • 강의 내용:
    • 멀티 스레딩의 개념
      • 멀티 스레딩이란 무엇인가?
      • 병렬 처리의 필요성과 이점
    • 파이썬에서의 멀티 스레딩
      • threading 모듈 소개
      • 기본 스레드 생성 및 관리
  • 실습:
    • 간단한 멀티 스레딩 예제
import threading

def print_numbers():
    for i in range(10):
        print(i)

def print_letters():
    for letter in 'abcdefghij':
        print(letter)

thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)

thread1.start()
thread2.start()

thread1.join()
thread2.join()

 

Day 2: 스레드 동기화

  • 강의 내용:
    • 스레드 동기화의 필요성
      • 경쟁 조건 (Race Condition)
      • 데드락 (Deadlock)
    • 동기화 기법
      • 락 (Locks)
      • 세마포어 (Semaphores)
      • 이벤트 (Events)
  • 실습:
    • 락을 사용한 스레드 동기화 예제
import threading

lock = threading.Lock()

def print_numbers():
    lock.acquire()
    try:
        for i in range(10):
            print(i)
    finally:
        lock.release()

def print_letters():
    lock.acquire()
    try:
        for letter in 'abcdefghij':
            print(letter)
    finally:
        lock.release()

thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)

thread1.start()
thread2.start()

thread1.join()
thread2.join()

 

Day 3: 스레드 커뮤니케이션

  • 강의 내용:
    • 스레드 간 데이터 공유
      • 큐 (Queue)
      • 파이프 (Pipes)
    • 스레드 간 메시지 전달
      • queue 모듈 사용
  • 실습:
    • 큐를 사용한 스레드 간 데이터 공유 예제
import threading
import queue

def producer(q):
    for i in range(5):
        q.put(i)
        print(f"Produced {i}")

def consumer(q):
    while True:
        item = q.get()
        if item is None:
            break
        print(f"Consumed {item}")
        q.task_done()

q = queue.Queue()
thread1 = threading.Thread(target=producer, args=(q,))
thread2 = threading.Thread(target=consumer, args=(q,))

thread1.start()
thread2.start()

thread1.join()
q.put(None)  # End signal
thread2.join()

 

Day 4: 고급 멀티 스레딩 기법

  • 강의 내용:
    • 스레드 풀 (Thread Pool)
      • concurrent.futures.ThreadPoolExecutor 사용
    • 데몬 스레드 (Daemon Thread)
      • 데몬 스레드의 개념과 사용 방법
    • 스레드의 성능 최적화
      • GIL (Global Interpreter Lock) 문제와 해결 방법
  • 실습:
    • 스레드 풀을 사용한 병렬 작업 예제
from concurrent.futures import ThreadPoolExecutor

def task(n):
    print(f"Processing {n}")
    return n * 2

with ThreadPoolExecutor(max_workers=4) as executor:
    futures = [executor.submit(task, i) for i in range(10)]

    for future in futures:
        print(f"Result: {future.result()}")

 

Day 5: 멀티 스레딩 종합 연습

  • 강의 내용:
    • 종합 연습 문제 풀이
      • 멀티 스레딩을 사용한 다양한 문제 해결
    • 멀티 스레딩의 응용
      • 실생활 예제에서의 멀티 스레딩 활용
  • 실습:
    • 종합 연습 문제 해결 및 결과 분석
### 종합 연습 문제 예시
1. 멀티 스레딩을 사용하여 파일을 병렬로 읽고 처리하세요.
2. 스레드 간 데이터를 안전하게 공유하고 동기화하세요.
3. 스레드 풀을 사용하여 대규모 병렬 작업을 효율적으로 처리하세요.

 

Day 6: 프로젝트 준비

  • 강의 내용:
    • 프로젝트 주제 선정 및 요구사항 분석
      • 프로젝트 주제 및 요구사항 확정
      • 프로젝트 설계 및 계획 수립
    • 프로젝트 구현 준비
      • 데이터 구조 및 알고리즘 설계
      • 스레드 관리 및 동기화 계획
  • 실습:
    • 프로젝트 주제 및 요구사항 분석
    • 프로젝트 설계 및 계획 수립
### 프로젝트 주제 예시
1. 멀티 스레딩을 사용한 웹 크롤러 개발
2. 병렬 데이터 처리 시스템 구축

### 프로젝트 요구사항 예시
1. 멀티 스레딩을 사용한 웹 크롤러:
   - 여러 웹사이트를 병렬로 크롤링
   - 스레드 간 데이터 공유 및 동기화
   - 크롤링 결과 저장 및 분석

2. 병렬 데이터 처리 시스템:
   - 대규모 데이터셋을 병렬로 처리
   - 스레드 풀을 사용한 작업 관리
   - 처리 결과 저장 및 시각화

### 프로젝트 설계 및 계획 예시
1. 데이터 입력 모듈 구현
2. 멀티 스레딩 알고리즘 구현
3. 데이터 출력 및 성능 분석 모듈 구현

 

 

반응형