python multiprocessing 사용법(계속) Pool편
9384 단어 Python3multiprocessingpool
방금 투고한 보도를 계속 조사하다.프로세스에서 다른 프로세스에서 이동하려는 함수를 하나하나 시작하는 것이 아니라 함께 실행할 수 있는 함수 Pool을 이용합니다.
테스트 코드
cpu_count()
Pool(num_cpu)
Pool 제작의 실례, `map(method, iterable_arg)
from multiprocessing import Pool, cpu_count
from time import sleep
from os import getpid, getppid
from numpy import exp, log
def f(args):
print("[{}---{}] args {}".format(getpid(), getppid(), args))
if isinstance(args, dict):
y = args["x"]
elif isinstance(args, int):
y = args
retValue =0.0
try:
sleep(1)
for i in range(1000000):
retValue = retValue/float(i+1) + log(exp(y * y + 1) - 0.1)
print("here=", 100/0.0)
except Exception as e:
print("[{}---{}] {}".format(getpid(), getppid(), e))
raise e
finally:
print('[{}---{}] return: {}'.format(getpid(), getppid(), retValue))
return(retValue)
if __name__ == "__main__":
print("main pid={} cpu_count={}".format(getpid(), cpu_count()))
p = Pool(6) # プロセス数を指定する
try:
result = p.map(f, [{"x":1}, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]) # リストで引数を指定する
print(result)
except Exception as e:
print("main", e)
실행 결과
CPU를 잘 분리해서 사용하세요.8코어지만
Pool(10)
오류도 없습니다.모두 8개의 전력으로 처리한 것 같습니다.다른 눈에 띄는 일.기초 지식이 없어서 실험적으로 공부하고 있습니다.땀
map
에서 실행되는 함수의 매개 변수는 유형이 다르더라도 가능합니다.맵은 조작할 수 있습니다. 실행 함수로 잘 처리하면.multiprocessing.cpu_count()
API에 대한 설명This number is not equivalent to the number of CPUs the current process can use. The number of usable CPUs can be obtained with len(os.sched_getaffinity(0))
쓰여 있지만 내가 집행할 때
os.sched_getaffinity(0)
항상{0, 1, 2, 3, 4, 5, 6, 7}
.CPU 할당 방법과 설치 방법이 있습니까?참고 정보
(2020/04/18)
추적 (2020/04/1817:40)
- 자세히 읽어보면 Pool을 사용할 때 가장 좋습니다
with Pool(processes=4) as pool:
.with를 통과할 때 Pool 프로세스가 닫힌 것 같습니다.
Reference
이 문제에 관하여(python multiprocessing 사용법(계속) Pool편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/XPT60/items/61f124cdc7979f4d63b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)