본문 바로가기

반응형

프로그래밍언어/Python

(33)
[Python] Magic method - 객체 생성, 초기화 1. object.__new__(cls [, ...]) __new__() 는 클래스 cls 의 새 인스턴스를 만들기 위해 호출된다. __new__()는 static method 로 첫번째 인자로는 만들려고 하는 인스턴스의 클래스가 전달된다. 나머지 인자들은 객체 생성자에 전달되는 것들이다. 일반적으로 super().__new__(cls [, ...]) 에 적절한 인자들을 전달하는 방법으로 super class 의 __new__() 를 호출해서 새 인스턴스를 만든 후, 해당 인스턴스를 반환하기 전에 수정을 진행한다. __new__() 가 객체 생성 시에 호출되고 cls 클래스의 인스턴스를 반환한다면 __init__(self [, ...]) 를 호출하는데, 이때 self 에는 새로 생성된 인스턴스가 전달되며..
[Python] urlparse 1. urllib.parse urllib.parse는 URL을 구성요소로 파싱하는 모듈이다. urllib.parse 모듈은 URL (uniform resource locator) 문자열을 addressing scheme, network location, path 등의 구성 요소로 구분하고, 이를 다시 URL 문자열로 결합하며, 상대 URL을 주어진 base URL을 기준으로 절대 경로로 변환하는 등의 기능을 수행한다. 이 모듈은 Relative Uniform Resource Locatorsd에 대한 인터넷 RFC에 맞춰 설계되었다. 지원하는 URL scheme들은 다음과 같다. - schemes: file, ftp, gopher, hdl, http, https, imap, mailto, mms, news..
[Python] argparser CLI에서 프로그램을 실행시킬 때 argument로 '-c', '--help' 등과 같은 옵션들을 줄 수 있다. 파이썬에서는 이러한 argument를 파싱하는 모듈로 argparse를 제공한다. argparse 모듈을 사용하여 사용자 친화적인 cli interface를 쉽게 작성할 수 있다. 이 모듈은 옵션으로 가능한 arguments를 정의하고, sys.argv를 어떻게 파싱할 것인가를 설정한다. 그리고 자동으로 help와 usage, issue error 등의 옵션을 생성해준다. 1. ArgumentParser class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_c..
[Python] Python 병렬처리 - threading (3) [threading - Thread-based parallelism] ■ Lock Objects primitive lock 은 잠긴 상태일때 특정 thread 가 소유할 수 없는 동기화 primitive 이다. 현재 파이썬에서 _thread 확장 모듈에 의해 직접 구현되는 가장 low 한 동기화 primitive 이다. primitive lock은 locked 와 unlocke, 두가지 상태를 가지고 있는데, 초기 생성 시에는 unlocked 상태로 생성된다. 해당 class 는 acquire 와 release, 두개의 메소드를 가지고 있으며, 이를 통해서 Lock 의 상태를 다룰 수 있다. 각 메소드는 현재 lock 의 상태가 locked 인지 unlocked 인지에 따라서 다르게 작동한다. - acq..
[Python] Python 병렬처리 - threading (2) [threading - Thread-based parallelism] ■ Thread Objects Thread class는 개별 제어 thread에서 실행하는 활동을 나타낸다. thread가 실행할 활동은 run() 메소드를 override 하거나 callable object를 전달하여 설정할 수 있다. ( override 시에는 __init__과 run() 메소드만 override 해야한다.) 각 thread의 활동을 시작하도록 하기 위해서는 start() 메소드를 호출한다. start 메소드는 thread의 run() 메소드를 실행시킨다. thread가 활동을 시작하면 alive 상태가 되는데, run() 메소드가 종료되거나 예외 발생 시에 alive 상태가 해제된다. alive 상태는 is_ali..
[Python] Python 병렬처리 - threading (1) [threading - Thread-based parallelism] threading 모듈은 _thread 모듈 위에 high-level threading interface를 구축하는 모듈이다. ■ Cpython implementationo detail CPython에서는 GIL로 인해서 하나의 파이썬 코드에서 하나의 스레드밖에 사용할 수 없다. 그렇기 때문에 멀티 코어의 연산자원을 효율적으로 사용하기 위해서는 multiprocessing이나concurrent.futures.ProcessPoolExecutor를 사용하는 것이 좋다. 반면에 I/O 병목 작업을 동시에 작업하는 경우에는 threading을 사용하는 것이 유리하다. ■ threading functions threading.active_cou..
[Python] Asterisks(*) in Python 파이썬 예제들을 찾아보던 중에 **option과 같은 문법을 발견하였다. 마치 c언어의 포인터와 같이 변수의 앞에 위치하고 있는 asterisk의 의미에 대해서 조사하면서 이외에 파이썬에서 asterisk를 사용하는 방법들에 대해서 살펴보았다. 1. 곱셈, 거듭제곱 연산 기본적으로 곱셈을 위한 연산자로 *를 많이 사용한다. 2 * 5# 10 또한 asterisk를 두개 붙여 사용하여서 거듭제곱 연산자로 사용한다. 2 ** 3# 8 4 ** 2# 16 2. iterable arguments의 unpacking 함수의 argument로 iterable한 값이 입력되었을 때 *를 사용해서 unpacking 할 수 있다. fruits = ['lemon', 'pear', 'watermelon', 'tomato']..
[Python] 비동기 프로그래밍 (asyncio) ■ Synchronous vs Asynchronous - Synchronous programming (동기 프로그래밍) : 주어진 task들을 순차적으로 실행하는 프로그래밍 방식. 하나의 작업이 수행중이면 그 다음 작업은 수행 완료까지 대기한다. - Asynchronous programming (비동기 프로그래밍) : task들을 병렬적으로 수행하는 프로그래밍 방식. 먼저 실행된 작업이 완료되지 않아도 다음 작업이 대기하지 않고 수행된다. ■ Event Loop 이벤트 루프는 작업들을 루프(반복문)를 돌면서 하나씩 실행시키는 역할을 합니다. 만약 실행된 작업이 특정한 데이터를 요청하고 응답을 기다려야 한다면, 이 작업은 다시 이벤트 루프에 통제권을 넘겨줍니다. 통제권을 받은 이벤트 루프는 다음 작업을 실..

반응형