반응형
import psutil
import os
import time
from multiprocessing import Process, Pool
shared_list = [1,2,3,4,5]
def count_step(temp):
p = psutil.Process(os.getpid())
time.sleep(shared_list.pop(0))
print(shared_list)
num_cores = 5
pool = Pool(processes=num_cores)
pool.map(count_step, shared_list)
pool.close()
pool.join()
print("DONE")
이번에 python으로 코딩하면서 Multiprocessing을 활용해야하는 일이 생겼다. 작업과정중에 특정 배열을 모든 프로세스에서 사용할수 있도록 해야했었는데 생각보다 쉽지가 않았다.
보통은 그냥 아래처럼 shared_list를 전역변수로 선언해서 작업을 하면 되겠지 라고 생각했는데
sleep을 아무리 해도 뭔가 배열이 공유가 안되는 느낌이였다
오랜시간동안 검색을 해보니 다음과 같은 사이트를 발견했고 똑같이 따라해보았다
수정된 코드는 다음과같다
import psutil
import os
import time
shared_list = []
def count_step(temp):
p = psutil.Process(os.getpid())
time.sleep(temp[0])
print(temp[1], temp[2], os.getpid(), p.name(), p.cmdline())
shared_list.append(temp[1])
print(shared_list)
num_cores = 5
pool = Pool(processes=num_cores)
pool.map(count_step, parameter)
pool.close()
pool.join()
print("DONE")
출력결과는 내가 원하는대로 하나의 배열이 실행되는 프로세스에 다 공유되는것을 확인할수있었다.
반응형
'Data > Python' 카테고리의 다른 글
[conda] conda env 환경 복사하기 (0) | 2022.11.30 |
---|---|
[Python] 변수를 다른 파일에서 가져오기 (0) | 2022.08.02 |
[Python] ssh로 원격 conda python실행시 주의할 점 (0) | 2022.07.21 |
[Python] splitlines, pandas (0) | 2022.03.27 |
[Python] psycopg2 라이브러리를 활용하여 table column얻기 (0) | 2022.03.22 |