[Python] GIL
·
Language/Python
CPython은 파이썬의 표준 구현이며 두 단계를 거쳐 파이썬 프로그램을 실행한다. 먼저 소스 코드를 구문 분석해서 바이트 코드로 변환 후, 인터프리터를 통해 실행한다. 이 떄 CPython은 GIL(Global Interpreter Lock)을 사용해 일관성을 강제로 유지한다. 따라서 파이썬에서 멀티 쓰레드 프로그램을 개발하는데는 한계가 있다.GIL이 멀티 쓰레딩에 어떤 영향을 주는지 코드를 통해 살펴본다. 처리하는데 오래 걸리는 함수를 작성하고 쓰레드를 사용했을 때와 사용하지 않았을 때의 시간을 측정해본다.xxxxxxxxxxdef factorize(n): for i in range(1, n + 1): if n % i == 0: yield i​import timenumbers = [135254,1341..
[Python] Flask
·
Language/Python
간단한 API 호출을 위한 웹 서버가 필요해서 flask 프레임워크를 사용해 구축하려고 한다. Spring, PHP, nodejs, django 등 많은 프레임워크가 있고 쓸 수도 있겠지만 두 가지 이유에서 flask를 선택했다. 간단하고 빠르게 개발이 가능하고 파이썬 언어를 사용하기 때문이다. 혼자서 개발하고 규모도 크지 않아 적절한 선택이라고 생각한다. flask로 직접 개발해본적은 없지만 쉽게 원하는 기능을 만들 수 있을것 같다.개발 환경은 ubuntu16.04LTS, python3.6으로 진행했다. 모듈 설치flask도 파이썬 모듈이기 때문에 pip로 설치 가능하다.pip install flask 앱 생성app.py파일을 만들고 코드를 작성한다.xfrom flask import Flaskapp =..
[Python] 함수 인자
·
Language/Python
파이썬으로 작성된 코드를 보다보면 함수 인자에 *args, **kwargs라는 생소한 인자가 들어간다. 이 키워드들이 어떤 것인지, *가 무엇을 의미하는지 확인해본다.packing/unpackingpacking은 여러 인자를 하나의 값으로 묶어주는 기능이다. 함수 인자의 이름 앞에 *를 붙여주면 된다.xdef foo1(*args): print("type", type(args)) print("value", args)​foo1(1, 2, 3, 4)위 코드를 실행하면 아래와 같이 출력된다.xxxxxxxxxxtype value (1, 2, 3, 4)foo1함수의 인자에 1, 2, 3, 4를 전달했으며 함수는 이 값들을 튜플의 형태로 가져온다. 따라서 인자의 갯수에 상관없이 함수를 호출할 수 있다.unpackin..
[Python] Pyenv
·
Language/Python
보통 파이썬 개발환경을 구축하는데 virtualenv를 사용한다. 프로젝트별 설치 패키지를 분리해서 관리하기 위해서이다. 개발하는데 파이썬 버전이 문제가 되서 새로 설치하려다가 pyenv를 통해 파이썬 버전도 관리할 수 있는 것을 봤다. 이것을 사용해서 프로젝트에 파이썬 버전까지 따로 관리를 할 수 있게 됐다.설치설치는 ubuntu18.04, 16.04 모두 확인했다.설치하기 전에 아래의 패키지들을 설치해야한다. 그래야 pyenv를 정상적으로 사용할 수 있다.xxxxxxxxxx$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm lib..