반응형
Python의 MultiProcess는 프로세스마다 독립적인 메모리를 가지고 있어, 아래와 같이 예상치 못한 결과를 받는 경우가 있다.
- 원했던 결과 : 1 -> 2
import multiprocessing
class a:
def __init__(self):
self.classb = b()
mp1 = multiprocessing.Process(target=self.mp_start, args=())
mp1.start()
mp2 = multiprocessing.Process(target=self.mp_start, args=())
mp2.start()
mp1.join()
mp2.join()
def mp_start(self):
self.classb.a()
class b:
def __init__(self):
self.result = {'a': 1}
def a(self):
print(self.result['a'])
self.result['a'] += 1
if __name__ == "__main__":
a()
# 1 -> 1
만약 특정 Object를 공유하고 싶다면, MultiProcess Manager를 사용하면 된다.
import multiprocessing
class a:
def __init__(self, shared_dict):
self.classb = b(shared_dict)
mp1 = multiprocessing.Process(target=self.mp_start, args=())
mp1.start()
mp2 = multiprocessing.Process(target=self.mp_start, args=())
mp2.start()
mp1.join()
mp2.join()
def mp_start(self):
self.classb.a()
class b:
def __init__(self, shared_dict):
self.result = shared_dict
def a(self):
print(self.result['a'])
self.result['a'] += 1
if __name__ == "__main__":
manager = multiprocessing.Manager()
shared_dict = manager.dict({'a': 1})
a_instance = a(shared_dict)
# 1 -> 2
반응형
'Study > Python' 카테고리의 다른 글
Ren'Py를 통한 게임 개발 시작 (0) | 2023.02.19 |
---|---|
[MAC] PKG로 설치한 Python 2.7 삭제하기 (0) | 2022.11.29 |
Python을 이용한 OTP 생성 (pyotp) (0) | 2022.10.19 |
[Python] SQLite3 사용 방법 (0) | 2022.09.17 |
[Python] 리스트 내 문자열이 특정 문자열 내에 존재하는지 비교 코드 (0) | 2022.09.09 |
댓글