[range] range 라는 것은 파이썬에서 연속된 숫자를 얻기 위해서 사용된다. r = range(10) print(r[0], r[1], r[-1])r 의 타입은 range 이고 인덱스를 통해서 접근이 가능하다. range(10) 이르는 뜻은 0~9까지 숫자를 가지고 있다는 뜻이다. r = range(5, 10) print(r[0], r[1], r[-1])range(5, 10) 이라고 하면 5는 start 가 되서 포함된다. 즉 5부터 라는 뜻이고 10은 stop 이라서 포함이 안되고 9 까지 이다. r = range(1, 10, 2) print(r[0], r[1], r[-1])이번에는 range 의 인자가 3개가 되었다. 첫번째 부터 start, stop, step 인데 step 은 숫자의 간격이 ..
[GIL] 자바나 C 계열의 언어를 사용하다가 파이썬을 하다보면 이해가 안되는 것이 GIL 이다. Global Interpreter Lock 의 약자로 여러개의 쓰레드가 있을때 쓰레드간의 동기화를 위해 사용되는 기술중 하나이다. GIL은 전역에 lock 을 걸어 두고 이 lock 을 점유해야만 코드를 실행할 수 있도록 제한한다. 따라서 동시에 하나 이상의 쓰레드가 실행되지 않는다. 예를들어 아래 그림과 같이 3개의 쓰레드가 분산해서 일을 처리하게 될 때도 실제로 cpu 점유할 수 있는 thread 는 하나 뿐이다. 따라서 실제로 사용하는 코어는 하나뿐인 것이다. [thread context switching] os 는 스레드 하나의 작업을 진행하기 위해 해당 스레드의 context 를 읽어오고, 다시 다..
ProcessPoolExecutor 은 기본적으로 ThreadPoolExecutor 와 동일한 기능으로 사용된다. ThreadPoolExecutor 와 마찬가지로 Executor 클래스의 하위 클래스로 많은 메소드가 동일하게 나타난다. [constructor] ProcessPoolExecutor 를 생성하는 과정은 concurrent.futures 모듈에서 클래스를 불러오는 부분과 다음과 같이 생 성자 객체 인스턴스화 하는거 빼고는 ThreadPoolExecutor 와 동일하다. from concurrent.futures import ProcessPoolExecutor import os import time def task(): print(f"executing out task on process {os...
동시성 퓨처는 파이썬 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..
- Total
- Today
- Yesterday
- django
- 문과 코딩
- 이미지 비교
- 파이썬
- 파이썬 강좌
- 면접답변
- pycrypto
- gitlab
- 장고 플러스친구 자동응답
- virtualenv
- 장고 카톡 자동응답
- 플러스친구 자동응답
- admin.py
- wsgi
- 파이썬 독학
- 모바일 스킨 적용
- 문서 비교
- gitignore
- 장고
- PuTTYGen
- chatbot
- 엑셀 비교
- 모바일 테마 적용
- 면접정답
- Tistory
- GIT
- 파이썬 프로그래밍
- django chatbot
- 파이썬 입문
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |