동시성 퓨처는 파이썬 3.2 에서 새로 추가된 기능이다. 자바 기반의 배경지식이 있다면 ThreadPoolExcutor 에 대해 익숙할 것이다. 동시성 퓨처는 TheadPoolExcutor 를 파이썬에 구현한 형태다. 멀티스레드 작업을 실행할 때, 가장 많은 연산을 필요로 하는 작업은 스레드를 시작하는 것이다. TheadPoolExcutor 는 스레드 풀이 필요할 동안 이를 생성함으로써 문제를 다룬다. 사용자는 작업을 수행할 때 더 이상 스레드를 생성하거나 실행할 필요가 없으며, 덕분에 한번만 스레드를 다룬다. [TheadPoolExcutor] from concurrent.futures import ThreadPoolExecutor def task(n): print(f"task number={n}") i..
클래스의 속성(변수, 함수)를 확인, 값을 얻거나 수정할 필요가 있다. 이런 기능을 제공하는 built in 함수들을 알아보자 class Custom: a = 1 def b(self): pass 이런 클래스가 있다고 하고 hasattr(Custom, 'b')b 라는 어트리뷰트가 있는지 여부를 확인할 수 있다. getattr(Custom, 'a')a 의 값을 얻는다. setattr(Custom, 'a', 9) a 의 값을 9로 수정한다. 함수는 일급객체로 취급 되므로 b 도 다른 함수로 바꿀수 있다. 단 staticmethod, classmethod 가 아니라면 바꿀 함수의 맨앞의 인자에 self 를 두는걸 잊지 말자 클래스 함수에서 데코레이터를 내부에 인자에서도 마찬가지다.
파이썬에서는 로그 출력을 위한 logging 모듈을 제공합니다. 아주 간단히 사용할 수 있으며 print 함수등을 콘솔에 출력하는 것보다 효율 적입니다. [로그레벨] 파이썬에서는 안드로이드와 거의 동일한 로그 레벨을 제공합니다. DEBUGINFOWARNINGERRORCRITICAL [간단한 logging 모듈 사용 예제]import logging as log log.basicConfig(filename='./log.txt', level=log.DEBUG) if __name__ == '__main__': log.debug('debug') log.info('info') log.warning('warning') log.error('error') log.critical('critical')basicConfig ..
컨디션은 다른 스레드의 신호를 기다리는 동기화(sync) 프리미티브다. 예컨대, 해당 스레드가 실행을 마쳐야지만 현재 스레드가 나머지 계산을 수행할 수 있다. 컨디션을 이용하면 다수의 다른 스레드에게 노티를 주어서 같은 컨디션으로 기다리고 있는 모든 스레드를 제어할 수 있다. import threading import time def consumer(cd): print("consumer thread started") with cd: print("consumer waiting ...") cd.wait() print("consumer consumed the resource") def producer(cd): print("producer thread started ...") with cd: for _ in r..
락은 기본적으로 한 스레드에서 잠금과 해제 사이의 구간을 처리할 때, 같은 락을 열고 들어와야 하는 다른 스레드의 간섭을 배제하는 용도로 쓴다고 했다. 그런데 이 과정이 특별한 언어적인 장치가 아니라 API 콜에 의존하고 있다는 문제가 있다. 무슨 말이냐면 어떤 함수의 도입부에서 락을 걸고 리턴하기 직전에 락을 해제하는데, 이 함수가 재귀호출을 하는 경우가 있을 수 있다는 말이다. 이 경우에 첫번째 재귀 호출에서 앞서 걸린 락 때문에 스레드가 블럭되고, 영영 해당 락을 해제하지 못하는 문제가 생긴다. RLock은 이 문제를 해결하기 위한 Lock의 변종이다. RLock은 이미 잠긴 상태에서도 자신을 잠그려는 스레드가 이미 자신을 잠근 스레드라면 잠김 수를 1올리면서 즉시 리턴하는 락이다. import t..
[lock: 락] 다수의 스레드 실행으로 공유자원에 접급할 때 필요한 메커니즘이다. 이를 이해하려면 1개의 화장실과 여러 명의 사람을 생각하면 된다. 한명이 화장실에서 샤워를 하면 다른 사람이 볼 수 없게 문을 잠가야 한다. 파이썬 락은 문을 잠그는 동기화 프리미티브다. 이는 락, 언락 상태가 있고 언락 에서만 락을 요청할 수 있다. import threading import time count = 1 def worker_a(): global count while count -1..
프로그램을 작성하다 보면 동시성이 필요하게 될때가 있다. 즉 여러가지 일을 동시에 진행해야 한다. os 에서 프로세스마다 리소스를 할당해서 여러 프로세스가 동시에 실행되는데 하나의 프로세스에서 여러개의 스레드를 생성하여 동시에 작업을 수행할 수 있다. 동시성을 갖는 것이지 성능향상에서 기대를 하지 않는게 좋다. 파이썬에서 제공하는 멀티 프로세스와 다르다. 그리고 비동기 io 가 필요하다면 asyncio 모듈을 사용하는 것을 권장한다. def execute_thread(*args, **kwargs): print(f"child thread start: args={args} kwargs={kwargs}") sleep_time = random.randint(1, 3) time.sleep(sleep_time) p..
Duck Typing - ‘If it walks like a duck and it quacks like a duck, then it must be a duck’ 해석해보면 ‘오리처럼 걷고, 오리처럼 꽥꽥거리면, 그것은 틀림없이 오리다.’ 라는 뜻입니다. 파이썬과 같은 동적타입의 언어에서 본질적으로 다른클래스라도 객체의 적합성은 객체의 실제 유형이 아니라 특정 메소드와 속성의 존재에 의해 결정되는 것입니다. Parrot 클래스와 Airplane 클래스는 분명 서로 상속되거나 하는 그런 관계는 없습니다만, 내부에 동일한 메소드의 fly()메소드가 있는 것만으로 호출하는 `lift_off(entity)’ 함수에서 fly가 정상적으로 실행됩니다. 마지막 Whale 클래스는 해당 fly() 메소드가 없기 때문에,..
[Stack: 스택] 자료의 입력과 출력을 한 곳(방향)으로 제한한 자료구조. LIFO(last in fist out) 구조로 push(): 값을 입력 pop(): 스택의 마지막 값을 지우고 리턴 함수의 콜스택(함수가 호출되고 종료되는 순서)에 쓰이고 문자열을 역순으로 출력할때, 사칙연산에서 괄호를 결합할때 등에 사용된다. [Queue: 큐] 자료의 입력과 출력을 front, rear 로 제한한 자료구조 FIFO(first in first out) put(): 값을 입력 get(): 큐의 처음 값을 리턴하고 삭제 컴퓨터 버퍼에서 주로 사용. 마구 입력이 되었으나 처리하지 못할때, 버퍼를 만들어 대기시킨다.
다음은 간단한 클래스의 예제이다. 세부 내용을 살펴보자. class Dog: def __init__(self, weight, name): self.weight = weight self.name = name def eat(self, food): self.weight += food def howl(self): print("howl!", self.name) def __repr__(self): return f"name={self.name} weight={self.weight}" d = Dog(10, "baduk") d.eat(5) d.howl() print(d) [네이밍 컨벤션] class 이름은 CamelCase 로 정의한다. class 내부 함수들은 snake_case 로 정의한다. [더블언더스코어] __는..
- Total
- Today
- Yesterday
- 파이썬 프로그래밍
- chatbot
- 장고
- 문서 비교
- 파이썬 독학
- 파이썬 강좌
- gitignore
- PuTTYGen
- 모바일 테마 적용
- GIT
- django chatbot
- gitlab
- virtualenv
- pycrypto
- 문과 코딩
- Tistory
- 이미지 비교
- 파이썬
- 파이썬 입문
- 플러스친구 자동응답
- admin.py
- 면접답변
- 장고 카톡 자동응답
- Python
- 면접정답
- 엑셀 비교
- django
- 모바일 스킨 적용
- 장고 플러스친구 자동응답
- wsgi
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |