반응형 Language20 [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] 비동기 프로그래밍 | LIM 파이썬에서 비동기 프로그래밍을 하기 위해서는 이벤트 루프와 코루틴 을 알고 있어야 한다. 📌 이벤트 루프(Event Loop) 이벤트 루프는 작업들을 루프를 돌면서 하나씩 실행시키는 역할을 한다. Callback Event Queue에서 하나씩 꺼내서 동작시키는 Loop를 말한다. 즉 이 이벤트 루프를 이용해서 비동기 방식으로 동시성을 지원하는 것이다. 만약, 실행된 작업이 특정한 데이터를 요청하고 응답을 기다려야 한다면, 이 작업은 다시 이벤트 루프에 통제권을 넘겨준다. 통제권을 받은 이벤트 루프는 다음 작업을 실행하게 된다. 그리고 응답을 받은 순서대로 멈췄던 부분분터 다시 통제권을 가지고 작업을 마무리 한다. 📌 코루틴(Cooperative Routine) 위에 이러한 작업이 파이썬에서는 코루틴으로.. 2022. 7. 9. [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. [Python] 예외처리 try, except, finally and raise | LIM 📌 python의 예외처리 1. try & except 우리가 대표적으로 예외처리를 하는 방법이다. def exception_test(self): try: abc = 321 abc.lower() except Exception as e: print("err message:", e) err message: 'int' object has no attribute 'lower' 2. try & except & finally finally 까지 추가하면 에러 발생과 관계 없이 항상 실행되는 코드를 추가로 구성할 수 있다. def exception_test_with_finally(self): try: abc = 321 abc.lower() except Exception as e: print("err message:".. 2022. 6. 24. [Python] 추상 메서드 ABC의 정의와 사용 | LIM python의 ABC 클래스는 Base 클래스를 상속받는 파생 클래스가 반드시 Base 클래스의 메서드를 명시적으로 선언해서 구현하도록 강제하는 추상화 클래스 기능이다. 따라서 상속받는 클래스에서 메서드를 구현하지 않으면 에러가 발생한다. 이 추상메서드를 이해하기 전에 먼저 상속과 다형성에 대한 개념을 잡아보도록 하자. 📌 상속(Inheritance)과 다형성 📚상속 OOP의 가장 강력한 기능중 하나인 상속은 클래스의 재사용성을 높임으로서, 코드의 반복에 따른 유지 보수 비용을 낮추는데 큰 역할을 했다. 예시) Country의 속성을 상속받은 Korea 클래스이다. 오버라이딩한 show 메서드에서는 Korea에서 정의한 대로 출력되고 나머지의경우 오버라이딩 되지 않아서 부모 클래스에서 정의된대로 출력되게.. 2022. 6. 19. 이전 1 2 3 4 다음 반응형