python multiprocessing 질문드립니다 !(수정)

조회수 2575회

Test라는 class를 정의한 후 그 속에 write, read 함수를 정의 하고, 객체를 생성한다음, 멀티프로세싱 모듈을 이용하여 두 함수를 동시에 실행시켜 보았을때, self변수들을 잘 사용하는지 확인하려고 코딩을 해보았습니다 ! 따라서 기대되는 결과값은 0부터 20까지 출력되고 종료되는 것입니다. 하지만, 콘솔에서 아무일도 일어나지 않습니다. 왜그런 걸까요? (win10이고 python==3.6 입니다.)

import time
from multiprocessing import Process


class Test:
    def __init__(self):
        self.queue = []
        self.end = 0

    def write(self):
        for i in range(20):
            self.queue.append((i, i+1))    # 큐에 데이터 추가
            # 마지막까지 입력이 완료된 후,  break될 수 있도록 end 값수정
            if i == 19:
                self.end = 1    


    def read(self):
        while True:
            if not self.queue:  # 큐가 비어있으면 1초 슬립
                time.sleep(1)   
            else:
                ans = self.queue.pop(0)  # 큐에 데이터가 있을시 읽어들임
                print(ans[1]) 
           # 큐에 데이터가 없고 end값이 1이면  종료
            if not self.queue and self.end == 1: 
                break


if __name__ == '__main__':
    tester = Test()  #객체생성

    p1 = Process(target=tester.write, args=())  #write 프로세스
    p1.start()

    p2 = Process(target=tester.read, args=())  #read 프로세스
    p2.start()

    p1.join()
    p2.join()
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 질문을 잘 하세요. 질문안에 소스코드는 무엇을 하는 코드인지 기대하는 결과는 무엇인지 사용하는 os와 python 버전은 무엇인지를 적어주시고 코드는 캡쳐 말고 코드로 올려주새요. 일일이 타이프 해서 테스트 해주는 사람은 드물어요. 정영훈 2018.8.13 03:03
  • 네 알겠습니다 ! 파이썬 공부한지 얼마 되지 않아서 생각이 짧았네요.. 수정하도록 하겠습니다 ! 알 수 없는 사용자 2018.8.13 03:10
  • 혹시 이거 해결되었나요??????????????? 알 수 없는 사용자 2021.1.29 15:12

1 답변

  • 멀티쓰레드가 아니라 멀티프로세스 입니다.

    쉽게 메모장을 두개 띄워놓고 내용을 공유하고 싶다는 것이 질문자의 핵심 질문입니다.

    현대의 운영체제에서 프로세스는 서로 격리된 공간으로 볼 수 있습니다.

    쉽게 A 메모장의 메모리를 B 메모장에서 접근 할 수 없습니다.

    정리하면 위의 소스는 멀티쓰레드로 하면 원하는 결과를 얻을 수 있었을 겁니다. 그러나 멀티프로세스이기 때문에 프로세스간에 (메모리에) 접근 할 수 없으므로 기대하는 결과를 못 얻는 것 입니다.

    그러면 어떤식으로 데아터를 주고 받고 데이터(변수)를 공유할 수 있는가?

    깊은 내용은 시스템 프로그래밍 서적에서 IPC 주제를 통해 학습하시면 됩니다.

    파이썬에서는 링크를 참조해보시기 바랍니다.

    multiprocessing 모듈에서 제공하는 공유 메모리를 이용하는 방법으로 문서에 주어진 에제를 분석해보면 감이 올겁니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)