Python
How doesn't a Data sharing at Threads
#Ubuntu 16.04 LTS
#Python 3.5.2
Thread
Thread 에서는 기본적으로 자원을 공유한다.
그래서 딱히 해주는 것 없이도 그냥 자원을 공유하게 된다.
하지만 간혹가다, Thread를 사용하는데 자원 값이 겹치면 안 되는 경우가 생긴다.
멀티 프로세스로 만들기는 너무 거창할 때 주로 그런 것 같다.
이 경우 지역 변수, 클래스 생성 등과 같은 방법으로 자원의 공유? 간섭?을 막을 수 있다.
솔직히 말로 뭐라고 설명해야 하는지 잘 모르겠다... 그냥.. 자원이 겹치지 않게 하는 방법이라고 해야할 까.. 머리아픔....
동작 가능한 소스 코드를 참조내용 1.GitHub 에 올려두었으니 해보고 싶은 분들은 ㄱ.ㄱ !!
HOW
1. 일반 지역변수를 사용할 경우
동작을 보고 싶다면 GitHub에 동작 1번을 실행시켜보길 바란다.
- 메소드를 호출하고 원하는 값을 매개변수로 넘겨서 메소드의 지역변수를 사용하여 값을 처리 한다.
a. 동작 순서: 왼쪽 -> 오른쪽
b. 결과
- 지역 변수 num의 값이 공유되지 않았음을 확인 할 수 있다.
2. 클래스를 사용할 경우
동작을 보고 싶다면 GitHub에 동작 2번을 실행시켜보길 바란다.
A. 메소드를 호출할 때 마다 매번 원하는 정보를 가진 클래스를 생성하여 생성한 클래스를 매개변수로 넘겨준다.
이 경우, 인스턴스의 지역 변수 뿐만 아니라 인스턴스의 변수 또한 Thread 마다 분리된 값을 가지게 된다. 1
a. 동작 순서: 왼쪽 -> 오른쪽
b. 결과
- 지역 변수 num의 값이 공유되지 않았음을 확인 할 수 있다.
- 인스턴스 변수 value의 값이 공유되지 않았음을 확인 할 수 있다.
동작을 보고 싶다면 GitHub에 동작 3번을 실행시켜보길 바란다.
B. 만약 클래스를 1회 생성하고, 메소드를 호출 할 때 마다 같은 클래스를 배개변수로 넘겨준다면?
이 경우, 인스턴스의 지역 변수는 Thread 마다 분리된 값을 가지지만, 인스턴스의 변수는 자원을 공유한다. 2
동작 진행 중
동작 진행 완료
a. 동작 순서: 왼쪽 -> 오른쪽
b. 결과
- 지역 변수 num의 값이 공유되지 않았음을 확인 할 수 있다.
- 인스턴스 변수 value의 값이 공유되어 사용되었음을 확인 할 수 있다.
#2018년07월09일
'개발자 레니는 지금 - > 소프트웨어와 함께' 카테고리의 다른 글
[ Python ] 복사의 늪에서 벗어나자, 얕은 복사 vs 깊은 복사 vs 걍 복사 (1) | 2018.07.13 |
---|---|
[ C/C++ ] 참조자와 포인터, 첨보면 무지무지 헷갈린다 (0) | 2018.07.10 |
[ Python ] 가상환경 만들기 (0) | 2018.06.07 |
[ Python ] len() 과 sys.getsizeof() 는 같을까? 다를까? (0) | 2018.04.12 |
[ Python 3.x ] 2진 데이터 (0) | 2018.04.10 |