TIL-비동기,동기_ver.py

kyoungyeon·2024년 8월 10일
0

TIL

목록 보기
115/122
import time 
import asyncio

input = [{"비동기 처리" :"병렬적,non-block, python 비동기asyncio"},{"동기 처리 " : "직렬적 ,blocking, timesleep()"}]
result = [(list(d.keys())[0],list(d.values())[0])for d in input]
result_str = [f'{key}:{values}'for key,values in result]
print('\n'.join(result_str))

async def find_users_async(n):
    for i in range(1, n + 1):
        print(f'{n}명 중 {i}번 째 사용자 조회 중 ...')
        await asyncio.sleep(1)
    print(f'> 총 {n} 명 사용자 비동기 조회 완료!')
    
async def find_user(n):
        
    for i in range (1, n+1):
      print(f'total {n} in {i} users !')
      await asyncio.sleep(1)
    print(f'total {n} users asynchronize')

async def process_async():
    start =time.time()
    await asyncio.wait([
      find_user(3),
      find_user(2),
      find_user(1),
    ])
    end =time.time()
    print(f'>> totla async time : {end-start}')

if __name__=="__main__":
  asyncio.run(process_async())

Example ref

비교

비동기

  • 프로그램이 여러 작업을 동시에 처리하도록 설계된 방식
  • 작업이 독립적으로 실행되어서
  • 한 작업의 완료를 기다리지 않고 다른 작업을 시작
  • 프로그램의 효율성과 성능을 높이는 데 도움
  • JS : 콜백 함수, 프로미스(Promise), async/await와 같은 기능
  • Python : asyncio , 기본적으로 python은 동기적 처리 방식
    • 비동기 작업의 완료 여부를 확인하고, 작업이 완료되면 결과를 처리.

Case

• 웹 애플리케이션에서 사용자가 파일을 업로드하고자 할 때

  • 동기 처리 : 파일 업로드가 완료될 때까지 사용자는 다른 작업을 진행할 수 없습니다.
  • 비동기 처리 : 파일 업로드가 진행되는 동안에도 사용자가 애플리케이션의 다른 부분을 사용하거나 새로운 작업을 시작할 수 있습니다.

New

zip 함수:

언패킹 했을때

언패킹 안 했을때

리스트 컴프리헨션을 사용하여 키와 값을 분리하고, zip 함수로 묶기

keys, values = zip(*[(list(d.keys())[0], list(d.values())[0]) for d in input_data])

  • 키 리스트와 값 리스트를 짝지어 튜플의 리스트로 만듭니다

  • zip() 함수를 이용하여 두 리스트의 요소를 쌍으로 묶어 새로운 리스트를 생성합니다.

  • 이는 리스트 컴프리헨션 내에서 반복적인 인덱싱을 피할 수 있는 효율적인 방법입니다.

  • 언패킹: * 연산자를 사용하여 튜플의 리스트를 keys와 values 변수에 언패킹합니다.

profile
🏠TECH & GOSSIP

0개의 댓글