728x90
반응형
[Python] Concurrency Thread Decorator
Thread Decorator
정말로 간단한 함수들을 Thread를 사용하기 위해 계속 같은 코드를 구현하는 것을 피곤하다.
다행히도 Python은 Decorator
기능이 있다.
Decorator
기능을 활용해서 간단한 비동기 I/O 함수들은 Thread
로 동작하도록 하자.HTTP Reqeust
는 Thread 보다는 async
await
를 활용한 Coroutine
으로 작성하고 안에는 꼭 비동기를 지원하는 패키지를 사용하자.
def using_thread(func: Callable):
def decorator(*args):
th = Thread(target=func, args=(*args,))
th.start()
return th
return decorator
@using_thread
def create_pdf(no: int, person: Person):
pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", size=12)
pdf.cell(txt=f"Name : {person.name}")
pdf.cell(txt=f"Age : {person.age}")
pdf.cell(txt=f"Location : {person.location}")
pdf.output(name=f"data/{uuid.uuid4()}.pdf")
print(f"{no} is done")
for i, person in enumerate(test_data):
create_pdf(i, person)
이 기능을 만들때는 Thread
나 Coroutine
사용에 있어서 주의하자.
엄청 많고 용량이 큰 파일
들을 한번에 Download, Upload 등 통신
을 할 때는 파일을 전달하기 위한 통신으로 인해 네트워크 리소스
를 엄청 잡아먹는다.
따라서, 상황을 먼저 판단해보고 기능의 총 작동 시간은 중요하지 않고 정상적으로 기능의 성공의 여부만 중요하다고 하면 단순 반복문으로 작성하고 Sleep을 조금 주어 주자.
728x90
반응형
'Python > Python' 카테고리의 다른 글
[Python] lru_cache (0) | 2022.09.28 |
---|---|
[Python] Object class __slots__를 이용한 성능 개선 (0) | 2022.09.28 |
[Python] Concurrency PDF 파일 생성 - 2 (0) | 2022.08.12 |
[Python] Concurrency 어떤 경우에 어떤 것을 사용하는게 좋을까 - 1 (0) | 2022.08.12 |
[Python] 음성인식(Speech Recognition) 과 TTS 구현 - 3 (0) | 2022.07.23 |