Python


- 파이썬은 1991년 발표된 인터프리터 방식의 프로그래밍 언어이다. 


- 인터프리터란 코드 한줄 한줄 읽어가며 실행하는 프로그램이고 실행하는 도중 에러가 나면 다음 코드는 실행되지 않는다.


- 즉, 파이썬은 스크립트 기반의 언어이다.


- 2000년도에 python2, 2008년도에 python3가 나왔다.




특징


- 명시적이고 심플하며 간결하다.


- 그렇기 때문에 높은 생산성을 가지고 있다.


- 문법이 굉장히 쉽다.


- 하지만 문법이 엄격하다. 예를 들면, 들여쓰기가 의무 규칙이고 자체가 하나의 코드 블럭이 되기 때문에 tab문자를 사용하지 않도록 권장한다.


- PEB-8에 명시된 공식 코딩 가이드에서는 스페이스 바로 공백 4문자를 넣기를 권장한다.


- 반복 가능한 객체. 이것은 파이썬의 가장 큰 특징 중 하나이다.

 : 파이썬에서는 반복가능한 객체(iterable)라는 강력한 기능을 제공하며 집합,문자열,리스트,함수 등 반복을 가능하게 한다.


- 가상 머신 위에서 실행되기 때문에 실행속도는 느린편이다. 

 : 가상 머신은 3.3 버전 이후 pyvenv를 사용한다.


- 다양하고 많은 라이브러리를 지원한다.




병렬 처리


- 기본적으로 파이썬 프로그램은 하나의 쓰레드에서 실행된다. (Single Thread)


- 쓰레드 클래스에서 daemon 속성은 서브쓰레드가 데몬 쓰레드인지 아닌지를 지정하는 것인데, 데몬 쓰레드란 백그라운드에서 실행되는 쓰레드로 메인 쓰레드가 종료되면 즉시 종료되며, 데몬 쓰레드가 아니라면 서브 쓰레드는 메인 쓰레드가 종료되도 자신의 작업이 끝날 때까지 계속 실행된다.


- 파이썬은 멀티스레딩을 지원하기 위해 GIL(Global Interpreter Lock)을 도입하여 사용하게 되었다. 따라서 python  스레드 10개를 만들어도 실제 10개가 만들어져도 GIL때문에 하나밖에 안돌아가는 현상이 있다. 뿐만 아니라 여러 성능 문제도 존재하기 때문에 파이썬에서의 병렬처리는 다중 스레드가 아닌 다중 프로세스로 GIL을 우회하는 방식을 사용한다.


네트워크 프로그래밍을 수행할 경우 파이썬의 동시성 및 병렬성에 대해 자세히 알아봐야 할 것 같다.




Python2 vs Python3


- 특이하게 python3는 python2와 호환되지 않는다.


- python2에는 많은 문제와 취약점을 갖고 있다.


- python3.x 부터 모든 문자는 유니코드 처리한다. 유니코드 특성상 2바이트 혹은 4바이트를 차지하는데 2.x 는 기본 1바이트이기 때문에 속도차이는 당연히 날 것이고 이 문제를 해결하기 위해 3.3 버전 이후부터 문자열 객체에서 가장 많은 바이트를 차지하는 문자를 기준으로 각 문자가 차지할 공간을 정하도록 변경되었다.




PEP


- PEP 이란 Python Enhancement Proposals 약자로서 파이썬을 개선하기 위한 제안서를 의미한다. 이러한 PEP 다음과 같이 크게 3 종류로 구분할 있으며, Python Software Foundation 공식 웹사이트인 python.org 에서 관리한다


- 특히 파이썬 코딩에 관련된 제안서는 PEP-8 에서 확인 할 수 있다.




FrameWork


Django : 풀 스택 웹 프레임워크

Flask : 마이크로 웹 프레임워크

Pygame : 파이썬으로 비디오 게임을 제작하기 위한 프레임워크






개발환경


파이썬 IDLE, Atom, SublimeText, VisualStudio Code, Eclipse-PyDev







앞으로 파이썬을 통해 주로 다뤄보고자 하는 것은  파이썬을 통한 네트워크 프로그래밍과 Django 프레임워크이다.








참고


http://pythonstudy.xyz/python/article/24-쓰레드-Thread

https://namu.wiki/w/Python



'programming > Python' 카테고리의 다른 글

django framework overview  (0) 2019.01.28
pyenv를 통한 python 개발환경 구성  (0) 2018.12.12
HOST, IP Address 간단하게 활용  (0) 2018.06.16

+ Recent posts