inflearn logo
강의

Course

Instructor

[Level 1] Python Programming with Qt: Introduction

Implementing a Thread Example Satisfying Re-entrancy Part 2

mutex, incNumber는 global 안붙여도 되는건가요?

121

padohy

3 asked

1

Re-entrancy를 만족하는 Thread 예제 구현 Part2 를 듣는중에 갑자기 mutex, incNumber는 global 안붙여도 제대로 동작하길래 무슨 원리일까요?

python gui qt qml pyside6

Answer 2

1

qtdev

global 없이도 잘 동작하는 경우가 있다?

네, 이건 두 가지 이유 중 하나 때문입니다:

① 이미 global이 코드에 명시되어 있다

→ 예제 소스코드상에 global numUsed가 Producer와 Consumer 둘 다에 들어 있습니다.

global numUsed

위의 코드가 이미 선언되어 있음

그래서 당연히 에러 없이 잘 동작합니다.

만약 이걸 빼면 어떻게 될까요?

② global을 빼면 실제로 에러가 발생한다

예를 들어 아래처럼 Producer에서 global numUsed를 뺐다고 가정하면:

class Producer(QThread):

def run(self):

for i in range(10):

time.sleep(1)

mutex.lock()

numUsed += 1 # 여기가 에러 발생

incNumber.wakeAll()

mutex.unlock()

실행하면 아래와 같은 에러가 뜹니다:

UnboundLocalError: cannot access local variable 'numUsed' where it is not associated with a value

즉, 정상적인 Python 동작에서는 반드시 global numUsed가 필요합니다.

 

혹시 더 궁금한게 있으면 언제든 질문해 주세요.

감사합니다. 김대진 드림.

 

 

1

communityai8509

안녕하세요, 인프런 AI 인턴입니다. padohy님.

Qt 관련 강의를 수강하시면서 쓰레드 및 동기화 문제와 관련하여 궁금한 점이 있으시군요. mutexincNumber가 전역 변수로 선언되지 않았는데도 올바르게 작동하는 이유에 대해 설명드리겠습니다.

Python에서 변수를 전역적으로 사용하고자 할 때 global 키워드를 사용하는데, 이는 함수 내에서 전역 변수를 수정할 필요가 있을 때 주로 사용됩니다. 그러나 mutexincNumber의 경우, 일반적으로 해당 변수가 함수 바깥에서 이미 정의된 상태라면, 읽기 전용으로 사용할 때 global 키워드를 사용하지 않아도 됩니다.

  1. Global 변수 접근: 어떤 변수든 함수 밖에서 초기화되고 읽기만 하는 경우에는 자동으로 그 변수를 가져와서 사용할 수 있습니다. 즉, 읽기 전용으로 변수를 사용하는 경우에는 global 키워드가 필요하지 않습니다.

  2. Global 변수 수정: 반면, 함수 내에서 전역 변수를 수정해야 할 경우에만 global 키워드가 필요합니다. 만약 함수 내에서 mutexincNumber를 수정하고 있다면, 이 경우에 global을 명시해야 합니다.

관련 내용의 예시나 코드 포맷에 대한 설명은 Qt 프로그래밍 환경을 설정할 때 공통으로 나타날 수 있는 상황입니다.

유사한 질문과 관련된 이전 답변들이 도움이 될 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

기출 11회 작업형 2_전체 데이터 학습 여부

0

3

1

RateLimitError

0

7

2

스프라이트를 아틀라스 추가시 크래시가나요

0

1

1

예측값 결과 소수점 차이

0

15

2

여태까지 발견한 이슈들 공유드립니다.

1

13

1

기출 문제와 실전챌린지 연습문제 무엇부터 푸는게 나은가요?

0

13

0

전처리 train() test([ ])

0

12

2

작업형 1 배경지식 질문

0

16

2

옳게 풀은건지 질문드립니다!

0

12

1

바로 답변을주셔서.... 하나더 ㅎㅎ

0

25

3

QML강의를 더 깊게 듣고 싶은데

1

26

2

강의가 넘 좋아서 3번째 복습을 하고 있는데

1

33

3

QT와 QT Designer에 대한 질문 사항

1

179

2

Qt Resource를 사용하는 예제 구현 10:15 구간 질의

1

149

2

데코레이터 @Slot을 꼭 써줘야 하는 건가요?

1

165

2

TableModel(QAbstractTableModel) 에서 질문입니다.

1

253

2

self가 있는 거와 없는 버튼

1

132

2

선호하는 GUI 개발 방법이 있으신가요

1

321

2

가장 큰 위젯의 너비와 같은 너비를 차지하는 2열 짜리 컬럼

1

250

2

exe 배포 시 .ui 파일 처리하는 권장하는 방법이 있나요?

1

330

1

클래스 __init__(self) 설정에서 이해가 안 되는 부분이 있습니다.

2

321

2

pyqt? pysie6? 차이점이 있을까요?

1

1457

2

자주 사용하는 Layout 살펴보기

1

166

2

강의 pdf파일 올려 주시면 안될까요?

2

246

2