jm_p_op
비동기 병렬처리와 객체화 본문
비동기화 된 함수들은 병렬로 처리가 되지만 안에 인스턴스된 한 객체의 메서드를 사용한다면, 결국 동기화랑 다를것이 없다
- 객체화된 메서드는 하나임으로 들어온 순서대로 처리
- 즉 동기화된거랑 차이가 없다
import time
import asyncio
class T:
def __init__(self) -> None:
self.x=[]
def add(self,n,i):
self.x.append(n)
time.sleep(1)
print("sleep")
print(f'{n}명 중 {i}번 째 사용자 조회 중 ...')
# async -> 비동기 함수로 변경
import time
import asyncio
# async -> 비동기 함수로 변경
t=T()
async def find_users_async(n):
for i in range(1, n + 1):
t.add(n,i)
# asyncio.sleep 이 비동기 함수이므로 await 추가
await asyncio.sleep(1)
print(f'> 총 {n} 명 사용자 비동기 조회 완료!')
# async -> 비동기 함수로 변경
async def process_async():
start = time.time()
# asyncio.wait : 함수 호출을 알아서 스케줄링하여 비동기로 호출
await asyncio.wait([
# asyncio 모듈의 wait() 함수에 넘겨지는 coroutines(코루틴)이 명시적으로 tasks(태스크)로 전달되어야 하므로
# asyncio.create_task() 함수를 사용하여 각 코루틴을 태스크로 변환해야 합니다.
# 태스크 : 코루틴을 동시에 예약하는 데 사용.
# 코루틴이 asyncio.create_task()와 같은 함수를 사용하여 태스크로 싸일 때 코루틴은 곧 실행되도록 자동으로 예약됨.
asyncio.create_task(find_users_async(i)) for i in range(100)
])
end = time.time()
print(f'>>> 비동기 처리 총 소요 시간: {end - start}')
if __name__ == '__main__':
asyncio.run(process_async())
'py > Eternal Return 분석' 카테고리의 다른 글
데이터 표본 다운로드 (0) | 2024.03.13 |
---|---|
ListFilterData(*conditions, **name_dic) - conditions 이름 바꾸기 (0) | 2023.12.06 |
내장 함수,객체에서 kwarg을 밖에서 연결하기 (0) | 2023.12.06 |
ERDataCleansing - 기능 추가&수정 (0) | 2023.11.12 |
ER_datas (0) | 2023.09.28 |