반응형 asyncio3 [Python] 코루틴으로 짜여있지 않은 함수 비동기적으로 이용하기(feat.run_in_executor) | LIM 파이썬에서 비동기 처리를 할 때 await 뒤에 오는 함수 역시 코루틴으로 작성되어 있어야 비동기적인 작업이 가능하다. 비동기로 짜여져 있는 라이브러리도 있으나 보통은 비동기를 고려하지 않고 짜여진 라이브러리가 대부분이다. 그럴 때 event loop 의 run_in_executor 함수를 이용하면 동기적인 함수를 비동기적으로 이용할 수 있다. ✔️ 먼저, asyncio.get_event_loop()를 활용해서 현재 이벤트 루프를 받아온 후 이벤트 루프의 run_in_executor 를 사용한다. run_in_executor는 다음과 같이 정의되어 있다. def run_in_executor(self, executor, func, *args): self._check_closed() if self._debu.. 2022. 7. 14. [Python] functools 의 partial | LIM 🧐 functools 모듈이란? functools 모듈을 몇 가지 고위 함수를 통합한다. 그 중 가장 널리 알려진 함수가 reduce() 함수이다. functools에서 제공하는 나머지 함수 중 partial() 및 이의 변형인 partialmethod() 함수가 매우 유용하다고 한다. ✔️ run_in_executor 에 이용한 functools.partial functools.partial()은 함수를 부분적으로 실행할 수 있게 해주는 고위함수이다. 어떤 함수가 있을 때 partial()을 적용하면 원래 함수의 일부 인수를 고정한 콜러블을 생성한다. 이 기법은 하나 이상의 인수를 받는 함수를 그보다 적은 인수를 받는 콜백 함수를 사용하는 API에 사용하고자 할 때 유용하다. 예를 들어 비동기 처리할 .. 2022. 7. 9. [Python] Flask와 FastAPI로 Python 동시성 테스트 | LIM 📌 파이썬의 동시성 파이썬에서는 쓰레드를 사용하는 threading 모듈, 태스크를 사용하는 asyncio 모듈, 그리고 프로세스를 사용하는 multiprocessing 모듈이 있는데 여기서 병렬적으로 작업을 처리하는 것은 실제로 multiprocessing 뿐이다. threading 과 asyncio 모듈은 모두 하나의 프로세서를 사용하기 때문에 한 번에 하나씩 실행할 수밖에 없다. 서로 context switching 되면서 동시에 실행되는 것처럼 보이게 되는 것이다. 이렇게 해서 작업 시간을 줄인다. 📌 threading과 asyncio 차이(concurrency) 파이썬에서 동시적인 작업을 할 때 사용하는 threading과 asyncio의 차이점은 threading은 모듈에서 실행되고 있는 각 .. 2022. 7. 3. 이전 1 다음 반응형