본문 바로가기
무모한 도전-주식 인공지능 만들기

멀티 프로세스를 이용한 병렬처리에 들어가 보기 -1-

by 인터넷떠돌이 2020. 2. 23.
반응형

안녕하세요?

 

멀티 스레드를 이용해서 어떻게 여러개의 조건을 병렬로 처리해 보고자 했습니다만, 그건 뜻대로 되지 않았습니다. 그래서 하는 수 없이 파이썬에서 멀티 스레드가 GIL이라는 락이 있어서 이런 특징이 있다고 하니, 이를 위해서 존재하는 멀티 프로세스를 이용해 보도록 했습니다.

 

이 작업을 하기 위해서 먼저 기존의 py파일을 복사해서 새로 만들어 준다고 해야 할까요? 일단 복사해서 다른 이름으로 만들어 주도록 합니다.

 

그리고 나서 기존에 하는 것처럼 for문 아래에 있는 데이터 베이스에서 하나하나 데이터를 읽어오는 문장을 그냥 주석처리 하도록 합니다.

 

그리고 나서 이번 작업을 하기 위해서, 일단 위 스크린샷처럼 새로운 차일드 프로세스 역할을 할 py파일을 생성해 주도록 합니다.

 

 

그리고 나서 다음으로 해야 할일은 위 스크린샷처럼 차일드 프로세스에서 작동이 될 것을 보여줄 증거품이 될 UI를 제작해 주는 일이 되겠습니다.

 

그리고 역시나 차일드 프로세스가 될 py파일에서도 혹시나 exe파일로 만들일이 있을 지 몰라서 일단 위 스크린샷처럼 조치를 미니리미 취해 주도록 합니다.

 

먼저 차일드 프로세스인 py파일만 먼저 실행을 시켰는데, 일단 UI자체는 제대로 나오는 것을 확인할 수 있었습니다. 이제 이것을 바탕으로 해서, 다음의 작업을 이어가도록 합니다.

 

다음으로는 부모 프로세스가 될 py파일에 와서 io모듈을 가지고 오도록 합니다. 저는 정확하게는 알지는 못하지만, 이게 부모프로세스와 자식 프로세스가 의사소통을 하는 통로가 될 것이라고 생각합니다.

 

그리고 나서 새로운 코드를 추가해 주도록 하는데, 먼저 기존에 있는 for문까지 포함해서 데이터 베이스를 읽는 구문은 모두 제거하도록 합니다. 그리고 나서 posix 운영체제일 경우를 원래 가정했는 코드기 때문에, 일단 위 스크린샷처럼 ON_POSIX라는 변수를 미리미리 구현하도록 합니다.

그리고 나서 os.pipe()라고 해서 부모와 자식 프로세스가 통신을 할 수 있도록 만들어 주도록 합니다.

 

그리고 나서 다음으로 해야 할일은 위 스크린샷처럼 processes라는 복잡한 변수를 만들었는데, 별거 없이 일단 sys.executable이라는 것은 시스템내에서 뒤에 오는 py파일을 실행시킬 수 있는 합당한 환경이 있으면 자동으로 찾아준다는 명령입니다. 그리고 나서 다음에 뒤에 오는 str(i)는 이후에 오는 for문을 보고서 추론한 것인데, 일단 여러개의 자식 프로세스를 생성하기 위해서 필요한 옵션으로 보입니다.

 

그래서 자식 프로세스가 여러개 생성하는데 성공했느냐 하면, 위 스크린샷에서 볼 수 있는 것처럼 일단 11개의 자식 프로세스가 바로 생성된 것을 확인할 수 있었습니다. 이렇게 해서 일단 작업이 제대로 되는 것을 확인할 수 있기는 있었습니다. 이제 남은 것은 자식 프로세스와 통신을 어떻게 연결하느냐와, 제대로 작업을 분배할 수 있느냐 입니다.

반응형