본문 바로가기

개발자 레니는 지금 -/소프트웨어와 함께

[ Python ] Thread, 쓰레드 데이터 공유하지 않는 방법

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. 메소드를 호출할 때 마다 매번 원하는 정보를 가진 클래스를 생성하여 생성한 클래스를 매개변수로 넘겨준다.

이 경우, 인스턴스[각주:1]의 지역 변수 뿐만 아니라 인스턴스의 변수 또한 Thread 마다 분리된 값을 가지게 된다.



a. 동작 순서: 왼쪽 -> 오른쪽

b. 결과

- 지역 변수 num의 값이 공유되지 않았음을 확인 할 수 있다.

- 인스턴스 변수 value의 값이 공유되지 않았음을 확인 할 수 있다.


동작을 보고 싶다면 GitHub에 동작 3번을 실행시켜보길 바란다.

B. 만약 클래스를 1회 생성하고, 메소드를 호출 할 때 마다 같은 클래스를 배개변수로 넘겨준다면?

이 경우, 인스턴스의 지역 변수는 Thread 마다 분리된 값을 가지지만, 인스턴스의 변수[각주:2]는 자원을 공유한다.


동작 진행 중

동작 진행 완료


a. 동작 순서: 왼쪽 -> 오른쪽

b. 결과

- 지역 변수 num의 값이 공유되지 않았음을 확인 할 수 있다.

- 인스턴스 변수 value의 값이 공유되어 사용되었음을 확인 할 수 있다.






#2018년07월09일

  1. 클래스로 만든 객체 [본문으로]
  2. self.value 와 같은 것들 [본문으로]