목차
파이썬 멀티 프로세싱이란? (Multi Processing)
파이썬은 위에서 아래로 코드가 진행되고 while 문에 걸리면 그 동안 다른 프로그램을 실행 할 수 없습니다. 이를 해결 하기 위해 파이썬에서 아래와 같이 3가지 방법을 제공 합니다.
- 멀티프로세싱(Multiprocessing)
- 멀티스레드(Multithread, threading)
- 인터럽트(Interrupt)
사실 인터럽트는 동시에 진행하는 것처럼 보이지만 실제로는 말 그대로 중간에 인터럽트가 발생하면 잠시 인터럽트 일을 처리하고 나머지 남은 일을 처리 하는 것입니다.
실제 pyserial이나 blutooth 통신을 하거나 DB와 연결하거나 등 연결쪽을 위한 프로그램이 동작하면서 동시에 처리쪽도 멈추지 않고 동작해야하는 경우들이 종종 있습니다. 이럴 때 사용하는 것이 멀티 프로세싱이나 멀티 드레드 입니다.
이번 시간에는 멀티 프로세싱에 대해 알아 보고 다음 장에서 멀티 스레드(Multi thread)에 대해 알아 보겠습니다.
실행 중인 프로그램을 프로세스라고 하고 각 각의 프로세스는 별도의 메모리(memory)와 stack, 프로그램 카운팅을 가지는 독립된 프로세서에서 동작하는 방식이라고 생각하시면 됩니다.
멀티 쓰레드(Thread)와의 차이는 쓰레드는 프로세서 내에 여러개의 실가닥처럼 메모리와 같은 자원을 공유하지만 프로세스(Process)는 혼자서 쓸꺼를 가진다는 것입니다.
실제 사용 방법은 아래 예제를 통해 쉽게 이해해보겠습니다.
파이썬 멀티 프로세싱 (Multi Processing) 예제
기본 예제
기본 예제 코드>>
from multiprocessing import Process
def func():
print("Hello world")
if __name__ == '__main__':
p = Process(target=func)
p.start()
p.join()
1번 라인: process 모듈을 import 합니다.
3~4번 라인: process 에서 동작시킬 함수를 정의 합니다.
7번 라인: process를 선언 합니다.
8번 라인: process 시작
9번 라인: process 종료
결과>>
Hello world
argument 입력 예제
예제 코드>>
from multiprocessing import Process
def func(text):
print(text)
if __name__ == '__main__':
p = Process(target=func, args=("hi",))
p.start()
p.join()
7번 라인: 입력 값을 args에 넣습니다. 괄호를 통해 입력 합니다.
8번 라인: process 시작
9번 라인: process 종료
결과>>
"hi"
두개의 프로세스 동시에 동작하기
예제 코드>>
from multiprocessing import Process
import time
def func0():
list_var = [1,2,3]
for x in list_var:
print(x)
time.sleep(1)
def func1():
list_var = ["a","b","c"]
for x in list_var:
print(x)
time.sleep(0.5)
if __name__ == '__main__':
p0 = Process(target=func0)
p1 = Process(target=func1)
p0.start()
p1.start()
print("main process is done")
4~8번 라인: 1~3을 출력하는 함수, sleep으로 1초 간격으로 출력
10~14번 라인: a~c를 출력하는 함수, sleep으로 0.5초 간격으로 출력
17~20번 라인: 2개의 프로세서 구동
21번 라인: 프로세서가 동작해도 main 함수가 완료하면 프린터문 출력
결과>>
main process is done
1
a
b
2
c
3
텍스트가 먼저 출력 되고 프로세스 결과는 교차로 출력됩니다.
다음 포스트에서 다른 2개의 프로세스 사이 변수 전달하는 방법(communication)과 pipe, queue에 대해 알아보겠습니다.
'파이썬(Python) > 문법' 카테고리의 다른 글
[Python] 멀티스레드란? 사용법, 예제 (Multi thread, target, args, start, join) (0) | 2022.06.30 |
---|---|
[Python] 멀티프로세스, 변수 교환 방법(Queue, Pipe, Multiprocess, Multitask, 파이썬)#2 (0) | 2022.06.29 |
[Python] Try Except Else Finally Raise 구문 사용 방법, 예제 (파이썬) (0) | 2022.06.27 |
[Python] 파이썬 yield란? 사용목적 (Generator, 제너레이터) (0) | 2022.06.24 |
[Python] 람다 함수란? 사용하는 목적(Lambda Function, Why) (0) | 2022.06.23 |