-
python 멀티프로세싱 pool process 에 대한 정리python source code 2023. 6. 20. 22:13728x90
multiprocessing.pool.Pool 클래스는 Python에서 프로세스 풀을 제공한다.
multiprocessing.Pool을 통해 프로세스 풀 클래스에 액세스할 수 있다.
작업을 프로세스 풀에 함수로 제출하여 동시에 실행할 수 있다.
작업을 제출할 수 있는 작업자 프로세스 풀을 제어하는 프로세스 풀 개체입니다. 시간 초과 및 콜백을 사용하여 비동기 결과를 지원하고 병렬 맵 구현이 있다.또 다른 특징으로는 작업의 시작과 종료에 대해 지정해줄 필요가 없다는 것이 있다.
한편, 프로세스를 사용하는 방식은 두 가지가 있다.
1. 타겟 함수를 실행
2. 클래스확장 및 오버라이드 run()
전자는 multiprocessing.Process 클래스의 인스턴스 생성, target을 통한 함수 지정, start()함수로 실행하는 방식이다.
# create a process process = multiprocessing.Process(target=task) # create a process process = multiprocessing.Process(target=task, args=(arg1, arg2)) # run the new process process.start()위 코드에서 arg를 통해 인수를 지정할 수 있다. (이 경우 튜플로 지정)
그리고 다른 하나인 extend class는
아래와 같은 방식으로 실행이 가능하다.
그러나 작업 결과가 필요한 경우 클래스의 사용을 자제할 것을 권고하고 있다.
- 다양한 많은 작업 타입이 존재할 때 서로 다른 타겟 함수를 사용할 때 multiprocess pool 이 더 유용하다.
- multiprocessing.Pool에 비동기적으로 제출할 때 반환되는 AsyncResult 객체로 작업 중에 상태확인이 가능하다.
class CustomProcess(multiprocessing.Process): def run(self):
multiprocessing.Pool
- Heterogeneous tasks, not homogeneous tasks.
- Reuse processes, not single use.
- Manage multiple tasks, not single tasks.
- Support for task results, not fire-and-forget.
- Check status of tasks, not opaque.
multiprocessing.Process
- Homogeneous tasks, not heterogeneous tasks.
- Single-use processes, not multi-use processes.
- Manage a single task, not manage multiple tasks.
- No support for task results.
- No support for checking status.
정리
여러 함수 호출에 분산될 수 있는 복잡한 작업에는 multiprocessing.Pool을 비추천,
대신 multiprocessing.Process 클래스를 확장하고 작업의 모든 기능을 캡슐화하는 것이 더 적합하다.
많은 상태를 관리해야 하는 작업에는 multiprocessing.Pool을 비추천, 대신 multiprocessing.Process 클래스를 확장하고 상태를 인스턴스 변수로 관리하는 것이 더 적합하다.
단일 일회성 작업에 multiprocessing.Pool을 비추천, 대신 "target" 인수와 함께 multiprocessing.Process 클래스를 사용하는 것이 더 적합하다.
장기 실행 작업에는 multiprocessing.Pool을 사용하지 마십시오. multiprocessing.Process 클래스를 확장하고 장기 작업을 정의하는 것이 더 적합할 수 있습니다.import multiprocessing as mp mp.cpu_count()(참고 : 위 코드는 사용 가능한 cpu 수량 확인 가능)
https://superfastpython.com/multiprocessing-pool-vs-process/
Multiprocessing Pool vs Process in Python
In this tutorial you will discover the difference between the multiprocessing pool and multiprocessing.Process and when to use each in your Python projects. Let’s get started. What is a multi…
superfastpython.com
https://jonsyou.tistory.com/27
[Python] 병렬처리, Multiprocessing
병렬처리의 필요성 요즘같이 대용량 데이터를 처리하는 과정에서 병렬처리 활용은 선택이 아닌 필수가 되어버렸다. 극단적으로 말하자면 코드를 어떻게 짜느냐에 따라 똑같은 작업이라도 1시
jonsyou.tistory.com
반응형'python source code' 카테고리의 다른 글
openAI gym 환경 생성 알아보기 (2) (0) 2023.07.22 openAI gym 환경 생성 알아보기 (1) (1) 2023.07.22 Streamlit 모듈을 활용한 웹 페이지 디자인 (사이트) (0) 2023.06.09 openAI gym API 관련 예제 (1) 2023.05.29 google colab 환경에서 No available video device 에러 해결 (0) 2023.05.27