언어
-
[Shell Script] if ... else 조건문언어/쉘 스크립트 2016. 12. 16. 13:52
쉘 스크립트에 조건문을 사용하는 여러 방식이 있지만 그 중 한 가지 방식만 아래에서 소개합니다.문법if [조건문];then 내용 elif [조건문];then 내용 . . . else 내용 fi예시# test.sh #! /bin/bash if [ "a" == "$1" ]; then echo "1" elif [ "b" = "$1" ]; then echo "2" else echo "0" fi 결과 $ ./test.sh 0 $ ./test.sh a 1 $ ./test.sh b 2조건문을 사용할 때 조심해야 할 점은 대괄호 양 사이에 한 칸을 꼭 띄워써야 됩니다. 만약 붙여서 쓰게되면 에러가 발생합니다. 예를 들어 if ["a"=="$1"] 이와 같이 썼을 경우 실행 시 에러가 발생합니다. 또한 조건문에서 문자열..
-
[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코어가 각기 다른 프로그램의 명령어를 실행하여 각 프로그램이 같은 ..
-
[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..