비동기 7

Python threading.local 와 ContextVar 비교

threading.local 와 ContextVar 는 둘 다 데이터를 격리하고 동적으로 할당한다는 점에서 유사한 목적을 가지고 있지만 사용되는 상황과 특징이 조금 다르다. 이 글에서는 둘의 공통점과 차이점을 예제 코드와 함께 비교해보고자 한다. threading.local threading.local 은 각 스레드마다 고유한 데이터를 가질 수 있게 해준다. 아래 예제 코드를 살펴보자. import threading # threading.local 객체 생성 thread_local_data = threading.local() def 스레드_울음소리(): thread_local_data.value = "끼룩끼룩!" def 스레드_동물호출(): value = getattr(thread_local_data, ..

JavaScript _ 콜백 함수를 알아보자

들어가며 자바스크립트에서 비동기 프로그래밍의 기초 개념 중 하나인 콜백 함수에 대해 알아보자. 본 글에서는 콜백 함수의 개념부터 동기 콜백과 비동기 콜백의 차이, 콜백 지옥과 한계, 그리고 콜백 함수 작성 팁까지 다루겠다. 또한 콜백 함수의 대안으로 선호되는 프로미스와 async/await에 대해서도 간략하게 소개하겠다. 콜백 함수란? 콜백 함수란 다른 함수에 인자로 전달되어, 어떤 작업이 완료된 후에 실행되는 함수이다. 콜백 함수는 자바스크립트에서 흔히 사용되는 패턴으로, 특히 비동기 작업을 처리할 때 유용하다. 비동기 작업이란, 작업의 실행과 완료 시점이 일치하지 않는 작업을 말하는데, 예를 들어 서버에서 데이터를 가져오는 작업이나 타이머를 사용한 작업 등이 비동기로 이루어질 수 있다. 콜백 함수의 ..

SQLAlchemy에서의 비동기 쿼리 (feat. 2.0 Style)

AsyncSession을 통한 비동기 DB 통신 SQLAlchemy 에서는 DB와 비동기로 통신하기 위해서 AsyncSession 을 사용합니다. 그런데 AsyncSession을 사용하게 되면 ORM방식도 바뀌는데요. SQLAlchemy 공식문서에서는 2.0 스타일 쿼리를 사용한다고 합니다. Synopsis - ORM Using 2.0 style querying, the [AsyncSession] class provides full ORM functionality. Within the default mode of use, special care must be taken to avoid lazy loading or other expired-attribute access involving ORM relati..

APScheduler를 이용해 비동기 작업을 예약하자

APScheduler 란? APScheduler는 Advanced Python Scheduler의 줄임말로 스케줄을 예약하여 실행할 수 있도록 돕는 라이브러리이다. 예를 들어 특정 시간에 실행시키고 싶은 코드가 있다거나, 일정 간격으로 수행해야 하는 코드가 있다면 이 라이브러리를 유용하게 사용할 수 있다. 특히 기존 스케줄러와 가장 큰 차이점이자 장점은 while과 같은 무한루프를 돌리지 않아도 코드를 비동기적으로 실행시킬 수 있다는 점이다! 실습 아래 실습 코드를 통해 사용법을 살펴보자 from apscheduler.schedulers.background import BackgroundScheduler from flask import Flask #----- #스케줄 실행 코드 def scheduler(..

apscheduler를 활용한 예약 실행 성공

목표 파일에서 DB로 옮기는 코드를 장 마감 시간에 맞춰 자동 실행하기 문제 기존에는 파일의 데이터를 DB로 옮기기 위해서는 클라이언트에서 추가로 요청을 해야 했다. 하지만 정해진 시간에 자동으로 작업을 수행하면 요청을 따로 할 필요도 없고 실수로 누락될 일도 없겠다는 생각이 들었다. 행동 스케줄을 사용하기 위해 구글링을 하다 보니 while로 무한 루프를 하는 코드만 있었다. 하지만 다행스럽게도 apscheduler 라이브러리를 사용하면 while을 돌릴 필요없이 다중 스케줄을 사용할 수 있었다. 그리고 실제 적용해본결과 flask서버와도 함께 사용할 수 있었다. 이로써 서버 시작과 동시에 여러 스케줄들을 자동으로 수행하는 것은 물론, 클라이언트로부터 다른 요청도 받을 수 있었다. # apschedul..

Log/Today 2022.01.18

파이썬 코루틴 활용

웹사이트 데이터 가져오기 1. session을 통해 url에 접속한다 2. request.get을 통해 데이터를 가져온다 3. session을 닫고 걸린 시간을 측정한다 * session을 간편하게 닫기 위해 with문을 사용했다. with문을 사용하면 with 블록을 벗어나는 순간 자동으로 close되어 편리하다. 4. 일반 코드와 코루틴 코드의 결과를 비교해본다 일반 코드의 경우(동기) >>> 15.04025387763977 초 ''' 동기로 코드를 작성할 경우 15.04025387763977 초 소요 ''' import requests import time def fetcher(session, url): with session.get(url) as response: return response.te..

동기 vs 비동기

동기란? 코드가 반드시 작성된 순서로 실행된다 요청 후 응답을 받지 못하면 바운드 상태를 유지한다 이전 요청에 대한 응답을 받아야만 다음 코드를 진행하므로 연산이 느려진다 예) 주문 받은 순서대로 처리한다. 앞선 주문이 완료되지 않으면 다음 주문으로 넘어가지 않는다 비동기란? 코드가 반드시 작성된 순서로 실행되는 것이 아니다 요청 후 응답을 받지 못해도 바운드 없이 다음 코드를 수행한다 이전 요청에 대한 응답을 기다리지 않으므로 동기보다 더 빠르게 연산이 가능하다 예) 주문을 수행하지만 완료되지 않아도 다음 주문을 진행한다 무조건 비동기가 좋을까? 단순한 계산은 비동기로 구현할 경우 코드가 복잡해지고 유지보수가 어려워질 수 있다 다음 단계로 넘어가면 안되는 계산이라면 동기로 구현하자 동기 비동기 비교를 ..