[기술서] 파이썬 병렬 프로그래밍 – 내용없음

리뷰 내용 말고 책 내용없음
스레드나 그 메커니즘을 자세히 설명한 것도 아니고
튜토리얼이 잘 나온것도 아니다

GIL이라던가.. 하는 파이썬에서 논란이 많은 부분에 대한 설명이있었으면 했는데
그냥 키워드만 나온다
각 기술의 차이도 비교가 상세히 되어있지 않다.

그냥 파이썬에서 병렬프로그래밍을 할 수 있는 기술과 그 샘플코드 정도만 소개 돼 있다.

내부모듈 이용

  1. threading
  2. multiprocessing

라이브러리 이용(추상화계층을 얹어서 병렬프로그래밍 구현)

  1. Celery: 표준. https://docs.celeryproject.org/en/stable/
    multiprocessing, gevent, eventlet 등 활용
  2. PP: Parallel Python 안쓰이지 않나….

파이썬 분산형 서버를 만들때 사용하는 기술

이 책에서는 참고할게 없고 그냥 일반적으로는

  • RabbitMQ, Redis 사용시에는 Celery 사용
  • Kafka와 StreamData를 다룰 때는 FaustStreams 사용

threading이나 multiprocessing은 쓸 일이 있을까
한 서버에서 돌릴수 있는 정도의 프로그램을 만들때
웹프로그램에서는 사용하지 않음

Python Flask 관련기술

파이썬 전반적인 부분과는 별개로 Flask 사용할 때 필요한 부분들

파이썬으로 복잡한 API 는 만들지 말자. 금지기술

역겨운 부분

app.py에는 db(Flask-Sqlalchemy), flask_app(Flask), jwt(Flask-JWT)
server.py에서 app.py를 본다. server.py는 models.module을 본다. server.py에는 jwt custom이 들어간다.
routes.module에서 app.py를 본다
models.module에서 app.py를 본다

jwt custom decorator는 어디다 넣어야되나
파이썬은 규모있는 API를 만든건 처음이긴한데
파이썬은 그냥 한개파일에 쑤셔넣을 정도 사이즈로만 사용해야 하는거 아닐까

로그인

  • Flask-JWT
    업데이트 안됨. extended와 pyjwt 의존성 버전충돌
    개인적으로는 아래것들도 안쓰고 코드를 퍼다가 프로젝트에 넣고 사용함
  • Flask-JWT-Extended
  • Flask-JWT-Simple
  • flask-bcrypt
  • Flask-Login
  • Flask-User
  • Flask-Security

API

  • Flask-CORS
  • Flask-Restful
  • Flask-Restplus
  • Flask-RESTX
    위에 두는 폐기.. 해야하겠지만 의존성 문제가 있으려나

Validation

  • cerberus
  • Flask-Validator

Doc

Test

  • unittest
  • pytest

StarterKit

  • https://github.com/lingthio/Flask-User-starter-app.git

파이썬 서버기술

파이썬으로 제대로된 서버개발을 한 적은 없어서 몇 가지 조사하다가 발견한것들

WebFramework

  • Django
  • Flask
  • Bottle https://bottlepy.org/docs/dev/
  • Pylons
  • Pyramit https://trypyramid.com/
  • Falcon
  • Eve https://github.com/pyeve/eve
  • CherryPy
  • FastAPI https://github.com/tiangolo/fastapi
    https://towardsdatascience.com/why-we-switched-from-flask-to-fastapi-for-production-machine-learning-765aab9b3679
  • https://github.com/juancarlospaco/faster-than-requests

엄청많다

ORM

  • SqlAlchemy
  • https://github.com/python-gino/gino
  • PonyORM
    https://ponyorm.org/
  • DjangoORM

SQL

  • PyPika
    https://pypika.readthedocs.io/en/latest/
  • https://github.com/tmuzzin/PythonSQLGenerator
  • https://github.com/hhyo/mybatis-mapper2sql
  • PyDAL
    https://github.com/web2py/pydal

비동기 기술

  • celery
  • faust
  • async
  • PyKafka
    https://pykafka.readthedocs.io/en/latest/
  • kafka-python
    https://github.com/dpkp/kafka-python
  • Winton Kafka Streams
    https://github.com/wintoncode/winton-kafka-streams

개발환경

  • anaconda
  • miniconda
  • virtualenv
    https://virtualenv.pypa.io/en/latest/
  • virtualenv wrapper
    https://virtualenvwrapper.readthedocs.io/en/latest/
  • pew
    https://github.com/berdario/pew
  • tox
    https://tox.readthedocs.io/en/latest/
  • nox
    https://nox.thea.codes/en/stable/
  • pipenv
    https://pipenv.pypa.io/en/latest/advanced/
    package.json처럼 실행환경을 지정할 수 있게 하는게 낫지 않을까? 커스텀 환경을 사용하려면 sh를 별도로 만드는게 나을 것 같다.
  • poetry
    https://python-poetry.org/docs/

실행환경

  • Gunicorn
  • uWSGI
  • Uvicorn(ASGI)
    https://www.uvicorn.org
  • supervisord
    http://supervisord.org/
  • honcho
    https://github.com/nickstenning/honcho
  • forever
  • pm2
  • unicorn

배포환경

  • zappa – aws lambda (반푼이)
  • serverless – aws lambda
  • https://github.com/GoogleCloudPlatform/functions-framework-python
  • https://github.com/tiangolo/uwsgi-nginx-flask-docker
  • https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker

기타 참고

  • https://dev.to/sm0ke/flask-dashboard-simple-open-source-starters-4noc

Python Anaconda – 버전관리? 환경구성?

https://conda.io/docs/user-guide/tasks/manage-environments.html

환경 목록

conda info –envs

환경 생성

conda create –name envname python=3.6

 

Activate the new environment:

  • Windows: activate myenv
  • macOS and Linux: source activate myenv

 

환경 삭제

conda remove –name envname –all

설치된 패키지 목록

conda list

Oracle – python 연동

Oracle은 별로 쓰고싶지 않은데…  또…

이번엔 clob 데이터 문제… mssql의 데이터를 oracle로 옮겨야되는데… clob자료형이다.
sql developer에서 insert query로 뽑아내서 옮기려고 하는데 clob라서 안된다.
python으로 스크립트를 짜서 처리를 하려고 하는데~~

Oracle은 만만한 녀석이 아니다.

프로세스 진행상황을 순차적으로 기록하면

1. MS-SQL 연동(은 덤으로)

pymssql을 설치하니까 간단히 연동이 된다.

바로 잘 돌아간다.

단, 내 컴퓨터에는

Visual Studio 2015, MSSQL(sql server 2008 r2)서버가 설치되어 있다. 조건이 다르다면 바로 안될수도 있다.

 

 

2. Oracle 연동

샘플코드는 이렇다.

도큐먼트 : http://cx-oracle.readthedocs.io/en/latest/index.html

 

오라클답게 쉽게 설치되지 않는다.
pip install cx_Oracle

pip로 설치후에 발견되는 에러
ImportError:DLL load failed:지정된 프로시저를 찾을 수 없습니다.
InterfaceError:Unable to acquire Oracle environment handle

 

위에러가 자꾸 나와서.

oracle instant client설치
C:\oracle\instantclient_12_1 이 경로에 설치 해 주고 path 잡아줬다.

cx_Oracle 설치
https://pypi.python.org/pypi/cx_Oracle/5.2.1 여기서 받아다가 설치

설치할 때 32/64비트 그리고 파이썬 버전을 잘 맞춰야된다.
오라클 버전도..

며칠 지났다고 기억이 안나네

Python 2.7 – Useful modules

1. Nose

https://pypi.python.org/pypi/nose/1.1.2

nose extends unittest to make testing easier

2. Numpy

http://sourceforge.net/projects/numpy/files/NumPy/1.6.1/

3. SciPy

http://sourceforge.net/projects/scipy/files/scipy/0.10.0/

4. MathPlotLib

http://matplotlib.org/

5. PyFtpdLib

https://code.google.com/p/pyftpdlib/

6. Paramiko

python ssh lib

7. BeautifulSoup4

CentOS – manually installed python with Postgresql lib(psycopg2)

 

파이썬 기본버전이 아닌경우 경로를 명시해서 실행해주면 된다.

ex) /opt/bin/python, /opt/bin/easy_install

 

yum install python-devel postgresql-devel

c헤더가 필요하데

MacOSx에서 port 이용하여 Python Django 설치

easy_install django
pip install django…
등도 사용가능하지만.. port만을 사용해서 설치하도록 한다.
다른것들도 다 port로 설치했으니까 일관성잇게

$ sudo port selfupdate
$ sudo port install python27
$ sudo port install py-django python27-django
$ sudo port install py-django-nose python27-django-nose
$ sudo port install py-django-extensions python27-django-extensions

확인하는 방법

여기서 안된다 보통…. no module 어쩌고 에러 발생한다.

그러면 파이썬 기본 버전을 설정해준다.

이거 했는데도 안되네…urandom이 없다네…

sudo port install py27-*

….를 해버렸는데도 안되네…

sudo port install opencv

이제된다.끝.

Python Script를 C/C++ 코드에서 실행시키기

이런 기능을 전문용어로 Embedded Python이라고 한다.

대충 이런 이름의 패키지를 설치해주면 관련 라이브러리가 함께 설치된다.
python-dev, python-devel, python2.7-dev

파이썬 도큐먼트에 친절하게도 샘플코드가 제공되고 있다.

test.c라는 파일을 생성한다.

리눅스에서 컴파일하는건 참… 힘든일이다.

Ctrl+F5누르면 자동으로 되는거라고 배운 사람들에게는

하다보면 익숙해지겠지
오브젝트 파일까지만 생성되는거
# gcc -pthread -fno-strict-aliasing -fwrapv -Wall -Wstrict-prototypes -fPIC -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/python2.7 -c test.c -o test.o 

실행파일이 생성되는거
# gcc -I/usr/include/python2.7 ptest.c -lpython2.7

컴파일을 하고 링크를 해야되잖아… libpython2.7.so를 써야되니까 gcc에 -lpython2.7을 써주면 되는거야

 

Python 리눅스 배포하기

파이썬 이외 파일 다 지우고, 모두 다 컴파일 후, py소스코드 파일 지우기

파이썬 소스코드 배포하면 안될경우 이렇게 한다.

단, 이렇게 하려면… .실행시킬 때 python main.py가 아닌 python main.pyc로 명령어를 만들어놔야한다.