분류 전체보기
-
[Python] Tip - 자식 프로세스를 관리하려면 subprocess를 사용언어/파이썬 & 장고 2016. 12. 9. 22:00
파이썬은 실전에서 단련된 자식 프로세스 실행과 관리용 라이브러리를 갖추고 있습니다. 따라서 명령줄 유틸리티 같은 다른 도구들은 연계하는 데 아주 좋은 언어입니다. 기존 셸 스크립트가 시간이 지나면서 점점 복잡해지면, 자연히 파이썬 코드로 재작성하여 가독성과 유지보수성을 확보하려고 하기 마련입니다.파이썬으로 시작한 자식 프로세스는 병렬로 실행할 수 있으므로, 파이썬을 사용하면 머신의 CPU 코어를 모두 이용해 프로그램의 처리량을 극대화할 수 있습니다. 파이썬 자체는 CPU 속도에 의존할 수 있지만 파이썬을 사용하면 CPU를 많이 사용하는 작업을 관리하고 조절하기 쉽습니다.수년간 파이썬에는 popen, popen2, os.exec*를 비롯해 서브프로세스를 실행하는 방법이 여러 개 있습니다. 요즘 파이썬에서 ..
-
[Python] 병행성과 병렬성언어/파이썬 & 장고 2016. 12. 9. 21:24
병행성(Concurrency)병행성(concurrency)란 컴퓨터가 여러 일을 마치 동시에 하듯이 수행하는 것을 말합니다. 예를 들어 CPU 코어가 하나인 컴퓨터에서 운영체제는 단일 프로세서에서 실행하는 프로그램을 빠르게 변경합니다. 이 방법으로 프로그램을 교대로 실행하여 프로그램들이 동시에 실행하는 것처럼 보입니다. 쉽게말해 오리가 물위를 떠다니기 위해 물속에서 발장구치는 것과 같습니다. (오리= 1 Core 컴퓨터, 발장구 = 여러프로세스들)병렬성(Parallelism)병렬성(parallelism)은 실제로 여러 작업을 동시에 실행하는 것입니다. CPU 코어가 여러 개인 컴퓨터는 여러 프로그램을 동시에 실행할 수 있습니다. 각 CPU코어가 각기 다른 프로그램의 명령어를 실행하여 각 프로그램이 같은 ..
-
[PostgreSQL] WITH ... AS, INSERT INTO .... ON CONFLICT .. DO UPDATE SET ..DB/PostgreSQL 2016. 12. 9. 21:04
여기서는 WITH ... AS 문을 사용하여 SELECT 결과가 없을 시 INSERT하는 쿼리, 로우가 1개 이상일 경우 UPDATE를 하고 그렇지 않으면 INSERT를 하는 쿼리 등을 설명합니다. 그리고 INSERT INTO .... ON CONFLICT .. DO UPDATE SET .. 문을 사용하여 보다 간편하게 로우가 없으면 INSERT, 존재하면 UPDATE를 하는 기능을 설명합니다.WITH ... AS여기서는 WITH ... AS 문에 대해 설명하기 보다 이를 사용해 다른 데이터베이스에 존재하는 upsert기능이나 select 결과가 없으면 insert를 하는 쿼리 등을 만들어 설명하겠습니다.upsert란 로우의 갯수가 1개 이상일 시, 사용자가 명시한 쿼리대로 레코드의 값을 update하고..
-
[PostgreSQL] 전체 데이터베이스, 스키마, 테이블 목록 조회DB/PostgreSQL 2016. 12. 8. 17:47
SELECT datname FROM pg_database -- 전체 데이터베이스 조회 SELECT datname FROM pg_database WHERE datistemplate = false -- 사용자가 생성한 데이터베이스만 조회 select nspname from pg_catalog.pg_namespace -- 현재 db의 전체 스키마 조회select tablename from pg_tables -- 전체 테이블 조회
-
[Python] Tip - 메타클래스로 클래스 속성에 주석달기언어/파이썬 & 장고 2016. 12. 6. 21:00
메타클래스로 구현할 수 있는 기능 중 하나는 클래스를 정의한 이후에, 하지만 그 클래스를 실제로 사용하기 전에 프로퍼티를 수정하거나 주석을 붙이는 것입니다. 보통은 이 기법을 디스크립터와 함께 사용하여 클래스에서 디스크립터를 어떻게 사용하는지 자세히 조사한 정보를 디스크립터에 제공합니다.예를 들어 고객 데이터베이스의 로우를 표현하는 새 클래스를 정의한다고 가정합니다. 데이터베이스 테이블의 각 컬럼에 대응하는 클래스의 프로퍼티가 있어야 합니다. 따라서 프로퍼티를 컬럼 이름과 연결하는 데 사용할 디스크립터 클래스를 다음과 같이 정의합니다.class Field: def __init__(self, name): self.name = name self.internal_name = '_' + self.name def..
-
[Python] Tip - 메타클래스로 클래스의 존재를 등록언어/파이썬 & 장고 2016. 12. 6. 20:33
메타클래스를 사용하는 또 다른 일반적인 사례는 프로그램에 있는 타입을 자동으로 등록하는 것입니다. 등록은 간단한 식별자를 대응하는 클래스에 매핑하는 역방향 조회를 수행할 때 유용합니다.예를 들어 파이썬 객체를 직렬화한 표현을 JSON으로 구현한다고 가정합니다. 객체를 얻어와 JSON 문자열로 변환할 방법이 필요합니다. 다음은 새엉자 파라미터를 저장하고 JSON 딕셔너리로 변환하는 기반 클래스를 범용적으로 정의한 것입니다.import json class Serializable: def __init__(self, *args): self.args = args def serialize(self): return json.dumps({'args': self.args}) class Point2D(Serializabl..
-
[Python] Socket과 TCPServer를 이용한 TCP/IP 프로그래밍 (작성중)언어/파이썬 & 장고 2016. 12. 6. 19:50
파이썬에는 HTTP, FTP, SMTP등 다양한 프로토콜을 구현한 네트워킹 라이브러리들이 있는데 그 라이브러리들이 공통으로 사용하는 라이브러리가 있습니다. 바로 Socket 모듈입니다. socket모듈은 TCP/IP, UDP/IP를 지원하는 버클리 소켓 인터페이스를 여러가지 함수와 socket클래스를 통해 제공합니다. socket 클래스를 이용하면 거의 모든 인터넷 프로토콜을 구현할 수 있다는 장점이 있지만, 익히고 사용하기가 간단하지 않다는 단점도 있습니다. 그래서 여기서는 socket클래스와 함께 TCPServer 클래스 모듈을 이용한 TCP/IP 프로그래밍을 설명합니다. TCPServer 클래스는 이름이 말하는 것처럼 서버 애플리케이션에서 사용하며 클라이언트의 연결 요청을 기다리는 역할을 합니다. ..
-
[Linux] IPv6 비활성화 방법서버 2016. 12. 6. 16:44
활성화 확인$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6 0 # 사용중 1 # 사용안함sysctl.conf 파일 수정$ sudo vi /etc/sysctl.conf # 파일 내 아래 내용 붙여넣은 후 저장 #IPv6 Disable net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1적용$ sudo sysctl -p $ sudo reboot활성화 확인$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6 1 # 활성화 상태 확인에서 사용안함 0 # 활성화 상태 확인에서 사용중
-
[Linux] 다중명령어(세미콜론, 파이프, &&, ||) 차이점서버 2016. 12. 6. 16:31
세미콜론(;)하나의 명령어 라인에서 여러 개의 명령을 실행(하나의 명령어 다음에 추가)첫 번째 명령이 실패하여도 두 번째 명령은 반드시 실행이 됨.$ printf "first command\n"; printf "second command\n" first command second command # linux; date -bash: linux: command not found 2016. 09. 04. (수) 11:21:39 KST파이프(|)앞에서 나온 명령 결과를 두 번째 명령에서 사용$ ps -ef | grep python root 30426 1 0 15:51 ? 00:00:00 sudo python3 manage.py runserver 0.0.0.0:80 root 30427 30426 0 15:51 ?..