티스토리 뷰
컨디션은 다른 스레드의 신호를 기다리는 동기화(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 range(5):
print("making resource ...")
time.sleep(1)
print("notifying to all consumers")
cd.notifyAll()
if __name__ == '__main__':
condition = threading.Condition()
cs1 = threading.Thread(name='consumer1', target=consumer, args=(condition,))
cs2 = threading.Thread(name='consumer2', target=consumer, args=(condition,))
pd = threading.Thread(name='producer', target=producer, args=(condition,))
cs1.start()
cs2.start()
pd.start()
condition.wait() 에서 notifyAll() 을 기다린다.
동일 컨디션에서 notifyAll() 함수가 호출되면 기다리고 있는 스레드 들이
wait() 함수 이하 코드를 실행하게 된다.
event 와 명확한 차이점에 대해서 생각한다면
노티가 될깨 까지 공유된 자원에 엑세스하는것이 베제적이 될때 컨디션 쓰는게 일반적일 것이다.
반면에 event 는 스레드들이 단지 무엇이 true 되기만을 기다리는 것 이외에는 돈케어(don't care)다.
'python lecture > concurrency' 카테고리의 다른 글
[edu] ProcessPoolExecutor (프로세스 풀 실행자) (0) | 2019.02.27 |
---|---|
[edu] ThreadPoolExcutor (스레드 풀 실행자) (0) | 2019.02.26 |
[edu] thread R lock (스레드 R 락) (0) | 2019.02.25 |
[edu] thread lock (스레드 락) (0) | 2019.02.25 |
[edu] thread start/join (스레드 시작, 조인, start, join) (1) | 2019.02.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- django chatbot
- 파이썬
- gitlab
- 플러스친구 자동응답
- wsgi
- 문과 코딩
- 모바일 테마 적용
- virtualenv
- 면접답변
- gitignore
- 파이썬 강좌
- Python
- 이미지 비교
- pycrypto
- 문서 비교
- 장고 카톡 자동응답
- 면접정답
- 엑셀 비교
- GIT
- 파이썬 프로그래밍
- admin.py
- 모바일 스킨 적용
- chatbot
- 장고
- django
- Tistory
- 파이썬 독학
- 장고 플러스친구 자동응답
- 파이썬 입문
- PuTTYGen
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함