분류 전체보기
-
[Shell Script] Command line arguments (인자 값) 처리언어/쉘 스크립트 2016. 12. 16. 13:29
쉘스크립트 파일을 실행할 때, 사용자가 입력한 인자 값은 순서대로 받을 수 있습니다. #! /bin/bash echo $# # 입력된 인자 값 echo $0 # 쉘스크립트 파일 실행 명령어 echo $1 # 첫 번째 인자 값 echo $2 # 두 번째 인자 값 echo $3 # 세 번째 인자 값 echo $4 # 네 번째 인자 값위와 같이 test.sh 파일을 저장합니다. $ ./test.sh 0 ./test.sh $ ./test.sh aaa 1 ./test.sh aaa $ ./test.sh aaa bbb 2 ./test.sh aaa bbb위와 같이 입력된 인자값을 순서대로 처리할 수 있습니다.
-
[Shell Script] test.sh 실행법언어/쉘 스크립트 2016. 12. 16. 13:20
파일생성 $ sudo vi test.sh #! /bin/bash # bash를 사용하려면 왼쪽과 같이 선언하고 본쉘을 사용하려면 /bin/sh를 선언 echo "test"위와 같이 입력하고 저장 권한변경파일을 생성한 다음, 바로 실행을하지 못하므로 실행할 수 있도록 권한을 수정합니다.$ sudo chmod 755 test.sh실행test.sh파일이 /home/ 아래에 있다고 가정 $ cd /home $ ./test.sh # 실행 또는 $ /home/test.sh # 절대경로로 실행
-
[Python] Tip - 스레드 간 작업을 조율하려면 Queue를 사용언어/파이썬 & 장고 2016. 12. 10. 01:48
많은 작업을 동시에 실행하는 파이썬 프로그램에서는 종종 작업들을 조율해 줘야합니다. 가장 유용한 병행 작업 방식 중 하나는 함수의 파이프라인입니다.파이프라인은 제조 공장에서 사용하는 조립 라인처럼 작동합니다. 파이프라인은 일렬로 이어진 단계들로 구성되며, 각 단계에는 특정 함수가 연결되어 있습니다. 새 작업 요소는 끊임없이 파이프라인의 앞쪽에 추가됩니다. 각 함수는 동시에 자신이 속한 단계에 배정된 작업 요소를 처리할 수 있습니다. 남아 있는 단계가 더는 없을 때까지, 각 함수에서 처리를 완료할 때마다 작업은 다음 단계로 이동합니다. 이 방법은 파이썬으로 쉽게 병렬화할 수 있는 블로킹 I/O나 서브프로세스를 이용하는 작업에 특히 잘 맞습니다. 예를 들어 디지털 카메라에서 끊임없이 이미지들을 가져와 리사이..
-
[Python] Tip - 스레드에서 데이터 경쟁을 막으려면 Lock을 사용언어/파이썬 & 장고 2016. 12. 10. 00:52
전역 인터프리터 잠금을 배우고 나면, 많은 신참 파이썬 프로그래머가 코드에서 상호 배제 잠금(뮤텍스)을 사용하지 않아도 될 것이라고 생각할지도 모릅니다. 파이썬 스레드가 여러 CPU 코어에서 병렬로 실행하는 것을 GIL이 이미 막았다면 플그램의 자료 구조에도 잠금이 설정되었을 것이라고 생각하기 때문입니다. 리스트나 딕셔너리 같은 타입에서 테스트해보면 이런 가정을 따라도 될 것처럼 보입니다.하지만 실제로는 그렇지 않습니다. GIL은 이러한 환경을 보호해주지 못합니다. 비록 파이썬 스레드가 한 번에 하나만 실행되지만, 파이썬 인터프리터에서 자료구조를 다루는 스레드 연산은 두 바이트코드 명령어 사이에서 인터럽트될 수 있습니다. 여러 스레드에서 동시에 같은 객체에 접근한다면 이런 가정은 위험합니다. 자료구조의 ..
-
[Python] Tip - 스레드를 블로킹 I/O용으로 사용하고 병렬화용으로 사용하지 않기언어/파이썬 & 장고 2016. 12. 9. 22:42
파이썬의 표준구현을 CPython이라고 합니다. CPython은 파이썬 프로그램을 두 단계로 실행합니다. 먼저 소스 텍스트를 바이트코드로 파싱하고 컴파일합니다. 그런 다음 스택 기반 인터프리터로 바이트코드를 실행합니다. 바이트코드 인터프리터는 파이썬 프로그램이 실행되는 동안 지속되고, 일관성 있는 상태를 유지합니다. 파이썬은 전역 인터프리터 잠금(GIL, Global Interpreter Lock)이라는 메커니즘으로 일관성을 유지합니다.본질적으로 GIL은 상호 배제 잠금(mutex)이며 CPython이 선점형 멀티스레딩의 영향을 받지 않게 막아줍니다. 선점형 멀티스레딩(preemptive multithreading)은 한 스레드가 다른 스레드를 인터럽트해서 프로그램의 제어를 얻는 것을 말합니다. 이 인터..
-
[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 -- 전체 테이블 조회