파이썬

6주차, 쓰레드, 멀티 프로세스 활용

호놀롤루 2022. 1. 29. 01:06

윈도우즈에선 멀티 프로세싱을 할때 에러가 나거나 불안정해지는 경우가 많다.

그래서 개발자는 맥이나 리눅스 쓴다.

 

그리고 멀티 프로세싱할 때 마지막에 꼭 close 해라, 작업관리자 켜보면 안닫은 거 전부 메모리

차지하고 있음

 

import time, os

import multiprocessing import Pool

 

def func(x):

    return x[0] * x[1]

 

if __name__ == "__main__":

    start = time.time()

    num_pool = 2

    pool = Pool(num_pool)

    print(pool, map(func, zip(range(100), range(100))) # [[0, 0], [1, 1], [2, 2]....] 형태로 제네레이터

    pool.close()

    print("****run time(sec) :", int(time.time() - start))

 

pool에는 인수를 여러개 넣을 수 없다. 그러니 리스트로 넣든 어떻게 넣든 잘 넣는 게 중요하다.

 

매개변수가 여러개인데 pool로 굳이 돌리려면 매개변수를 하나만 받는 함수로 바꾸는 함수가 있다.

 

import time, os

import multiprocessing import Pool

import functools import partial

 

def func(x, y):

    return x[0] * x[1]

 

partial(fucn, y=3) # 부분적으로 고정

 

if __name__ == "__main__":

    start = time.time()

    num_pool = 2

    pool = Pool(num_pool)

    print(pool, map(func, range(100)))

    pool.close()

    print("****run time(sec) :", int(time.time() - start))

 

그리고 주피터 노트북으로 실행할 때 같은 파일 내에서 함수를 지정하면 서브 프로세스가 그 함수를

찾질 못한다.

그래서 밖에 다른 파일을 만들어놓고 모듈로 import하면 주피터 노트북에서도 멀티 프로세싱을 할

수는 있다.

보통 터미널이나 파워쉘로 함