티스토리 뷰
[edu] thread start/join (스레드 시작, 조인, start, join)
burningrizen 2019. 2. 25. 11:05프로그램을 작성하다 보면 동시성이 필요하게 될때가 있다.
즉 여러가지 일을 동시에 진행해야 한다.
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)
print(f"child thread finished")
if __name__ == '__main__':
thread = threading.Thread(target=execute_thread, args=(1,), kwargs={"name": "kim", "age": 10})
thread.start()
thread.join()
print("parents thread finished")
threading 모듈을 이용해서 구현해 보자
thread.Thread 함수를 통해 스레드 인스턴스를 생성할 수 있다.
target 은 스레드를 돌릴 함수
args, kwargs 를 각각 함수의 인자로 넘겨 줄 수 있다.
start() 를 통해서 스레드를 시작할 수 있다.
여기서 join() 을 살펴 보자
join() 은 부모 스레드 즉, 해당 스레드를 생성한 스레드를 진행하지 않고
자식 스레드 즉 새로 생성한 스레드의 종료를 기다려 준다는 의미이다.
join() 이 없다면 자식 스레드의 종료를 기다리지 않고
"parents thread end" 가 출력되고
"child thread finished" 가 호출 될것이다.
하지만 join() 이 있다면
"child thread finished"
가 호출되고 자식 스레드가 종료되는 것을 기다리고
"parents thread finished"
가 호출된다.
스레드에서는 순서를 제어하는게 굉장히 중요하다.
순서의 제어를 놓치게 되면 큰 문제가 발생한다.
방사선 기계 소프트웨어에서 스레드 문제로
사람이 3명이나 사망한 사례가 있다고 한다.
'python lecture > concurrency' 카테고리의 다른 글
[edu] thread condition (컨디션, 스레드) (0) | 2019.02.25 |
---|---|
[edu] thread R lock (스레드 R 락) (0) | 2019.02.25 |
[edu] thread lock (스레드 락) (0) | 2019.02.25 |
[edu] asyncio ensure_future (다중, multi ,비동기 코루틴) (0) | 2019.02.12 |
[edu] multiprocessing pool (멀티 프로세싱, 소수, 성능) (0) | 2019.02.12 |
- Total
- Today
- Yesterday
- 파이썬 프로그래밍
- 엑셀 비교
- 파이썬 독학
- django
- gitignore
- 이미지 비교
- django chatbot
- chatbot
- Python
- 장고 플러스친구 자동응답
- gitlab
- 장고
- 파이썬 강좌
- virtualenv
- 문과 코딩
- 모바일 테마 적용
- admin.py
- 면접정답
- wsgi
- 모바일 스킨 적용
- 파이썬 입문
- 장고 카톡 자동응답
- Tistory
- pycrypto
- GIT
- 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 |