파이썬 Thread

r5z Yoon·2023년 8월 29일
0

프로젝트 중 특정 키워드로 텍스트 제너레이팅이 되는 동안 클라이언트에선 일정 시간 동안 일정 간격 으로 로딩 메시지를 출력하고
텍스트 제너레이팅이 끝나면 서버에 저장 후 클라이언트에서 저장된 DB를 요청하면 서버에서 출력해주는 작업이 있는데
유동적으로 진행되어야 할 것 같아 고민이 많다. 아직 어떤 식으로 해결할지 결정하진 않았지만 스레드 thread 모듈을 쓸 가능성이 높아서 리마인드할 겸 메모.

스레드는 프로그램 내에서 동시에 여러 작업을 수행하기 위해 사용되는 다중 쓰레드 프로그래밍 모듈이다.

스레드는 threading 모듈을 사용하여 스레드를 생성하고 관리할 수 있다.
스레드는 독립적인 실행 흐름을 가지며, 여러 스레드가 동시에 실행되면서 작업을 병렬로 처리할 수 있음.

주요 기능과 클래스:

  • 스레드 객체의 속성
    start(): 스레드 시작
    join(): 해당 스레드에서 실행되는 함수가 종료될 때까지 기다리기. timeout=인자로 특정 시간까지만 기다리게 할 수 있음. 타임아웃을 초과해도 예외를 일으키지 않으니 주의
    is_alive(): 해당 스레드가 동작 중인지 확인
    name: 스레드의 의름
    ident: 스레드 식별자. 정수값임
    naive_id: 스레드의 고유 식별자
    daemon: 데몬 스레드 여부

  • Thread 클래스
    스레드 객체를 생성하고, 해당 스레드 객체의 start() 메소드를 호출하여 스레드를 실행시킬 수 있음
import threading

def my_fuction():
	
    pass
    
thread = threading.Thread(target=my_fuction)
thread.start()

  • Lock 클래스
    스레드 간의 공유 자원에 대한 동기화를 위해 사용됨. 여러 스레드가 동시에 접근할 때 데이터의 일관성을 유지하기 위해 사용
import threading

counter = 0
counter_lock = threading.Lock()

def increment_counter():
	global counter
    with counter_lock:
    counter += 1
    
threads = []
for _ in range(10):
	thread = threading.Thread(target=increment_counter)
    threads.append(thread)
    thread.start()

for thread in threads:
	thread.join()

print("Counter value:", counter)
profile
_____ is a process </br> https://github.com/R5Z

0개의 댓글