Python Celery 써보기 - 1. 비동기처리

박주윤·2023년 1월 13일
0

Celery

목록 보기
1/2

회사 일을 배우는 중이다.

비동기처리와 관련된 내용을 공부하기 위해 Celery를 공부하고 토이프로젝트를 하나 만들어 보라고 하셨다.
일단 네 알겠습니다. 하고 나서 제일 먼저 검색하는건 Celery가 아니라 비동기 처리였다.
부끄럽지만 맨날 비동기처리라는 단어는 많이 들었는데 실제 뭔지 정확히 모른다.
동기화 하지 않고 처리한다는건데 왜 쓰는지도 모른다.

일단 비동기처리가 뭔지를 검색해보자.
특정 로직의 실행이 끝날때까지 기다려주지 않고 나머지 코드를 실행하는 것이랜다.
예제들은 하나같이 내가 제일 싫어하는 js다.
async await 단어만 봐도 빡친다. 왜냐고? 쓸줄 모르니까. 강의를 아무리 들어도 이해가 안되는데 어떡해 이걸.

일단 비동기처리를 왜 쓰는지는 알겠다.

데이터 저장 30만건 + 다른 코드로 데이터 저장 30만건 이면

일반적으로 진행하면

30만건 저장 하고, 또 15만건 저장 할테니까 시간이 45만건의 시간인데

비동기로 진행하면

30만건 하면서 따로 15만건 저장을 진행하면 시간이 줄어들 테니까

여기 내용을 보고 확실히 이해를 한 것 같다.
https://ffoorreeuunn.tistory.com/462

맨날 자바스크립트로 timeout(3000)이었나 이거 왜 안돼는지 상황만 보고 모르는코드로 봐서 제대로 이해가 안됐는데

내가 생각하는 합리적인 상황(프로그램 코드 위에서부터 절차대로 실행하는) 을 보고 async await을 보니까 이해가 좀 더 쉬웠다.

작성자분께 감사하다.

아래는 내가 작성한 동기, 비동기 차이 구분이다.

import time
def hello():
    time.sleep(1)
    print('hello')
def main():
    for _ in range(3):
        hello()
print(f'start : {time.strftime("%X")}')
main()
print(f'  end : {time.strftime("%X")}')

이게 내가 해왔던 정상적이라고 생각했던 코드

import asyncio
async def hello():
    await asyncio.sleep(1)
    print("hello")
async def main():
    await asyncio.gather(
        hello(),
        hello(),
        hello()
    )
print(f'start : {time.strftime("%X")}')
    #asyncio 없이 main()하면
    #main이 await 되지 않아서 실행이 안된다고 하고
    #프로그램 종료가 아니고 아래 end는 또 진행됨 이건 신기하네
asyncio.run(main())
print(f'  end : {time.strftime("%X")}')

이게 방금 내가 배운 비동기처리 코드

맨날 절차맞춰서 알고리즘만 풀고 DBA가 꿈이라 쿼리공부밖에 안했는데 확실히 새로운걸 보면 신기하긴 하다. 애초에 개발자가 비동기처리를 새롭다고 여기는 것 자체가 선배님들이 보기엔 허접쉑이라고 하겠지만....

이걸 기반으로 Celery 가이드페이지에서 공부를 시작해야겠다.

0개의 댓글