python multiprocessing 사용법(계속) Pool편

python에서multiprocessing의 사용 방법을 조사하고 있습니다.
방금 투고한 보도를 계속 조사하다.프로세스에서 다른 프로세스에서 이동하려는 함수를 하나하나 시작하는 것이 아니라 함께 실행할 수 있는 함수 Pool을 이용합니다.
  • 병렬 처리에 사용할 핵심의 수량(상한수)을 지정할 수 있습니다.
  • 서로 다른 핵심 이동으로 지정한 처리.느낌
  • 병렬 처리를 원하는 함수가 같고 매개 변수만 같지 않으면 Pool로 간단하게 쓸 수 있습니다.
  • 동적 관찰을 할 때의 축심점.

    테스트 코드

  • CPU 수 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개의 전력으로 처리한 것 같습니다.

    다른 눈에 띄는 일.기초 지식이 없어서 실험적으로 공부하고 있습니다.땀
  • 프로세스 ID가 재사용됩니다.(따라서 함수 실행에 사용할 수 없는 유니크 식별입니다.)
  • 에서 발생하는 Exception은 상위 프로세스에서 캡처되지 않습니다.(그래요?)
  • map에서 실행되는 함수의 매개 변수는 유형이 다르더라도 가능합니다.맵은 조작할 수 있습니다. 실행 함수로 잘 처리하면.
  • 또한 CPU 수에 대해서는 문서에서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 할당 방법과 설치 방법이 있습니까?

    참고 정보

  • 실제로 보도의 맨 처음에 Pool의 사용법을 소개했다.https://docs.python.org/3/library/multiprocessing.html
  • 실제 사용 시 불편함 등에 대한 정보도 있다.https://qiita.com/yukitaka13-1110/items/2580b4fc6c8a30d34661
  • 병렬 처리https://qiita.com/studio_haneya/items/1cf192a0185e12c7559b
  • 여기는multiprocessing입니다.나는 py의 원본 코드를 읽었다.https://qiita.com/bananaumai/items/48ee1b4b069a5c17bc6f
  • 다음 주에 방법이 있었으면 좋겠어요.
    (2020/04/18)
    추적 (2020/04/1817:40)
    - 자세히 읽어보면 Pool을 사용할 때 가장 좋습니다with Pool(processes=4) as pool:.with를 통과할 때 Pool 프로세스가 닫힌 것 같습니다.

    좋은 웹페이지 즐겨찾기