백엔드 개발 파이썬 튜토리얼 예제가 포함된 Python 다중 처리 모듈에 대한 빠른 가이드

예제가 포함된 Python 다중 처리 모듈에 대한 빠른 가이드

Sep 12, 2024 pm 02:17 PM

A Quick Guide to the Python multiprocessing Module with Examples

소개

Python의 다중 처리 모듈을 사용하면 프로세스를 생성하고 관리할 수 있으므로 컴퓨터의 다중 프로세서를 최대한 활용할 수 있습니다. 스레드가 동일한 메모리 공간을 공유하는 스레딩과 달리 각 프로세스에 대해 별도의 메모리 공간을 사용하여 병렬 실행을 달성하는 데 도움이 됩니다. 다음은 간단한 예와 함께 multiprocessing 모듈에서 일반적으로 사용되는 클래스 및 메소드 목록입니다.

1. 프로세스

Process 클래스는 멀티프로세싱 모듈의 핵심으로, 새로운 프로세스를 생성하고 실행할 수 있게 해줍니다.

from multiprocessing import Process

def print_numbers():
    for i in range(5):
        print(i)

p = Process(target=print_numbers)
p.start()  # Starts a new process
p.join()   # Waits for the process to finish
로그인 후 복사

2. 시작()

프로세스 활동을 시작합니다.

p = Process(target=print_numbers)
p.start()  # Runs the target function in a separate process
로그인 후 복사

3. 가입([시간 초과])

join() 메소드가 호출된 프로세스가 종료될 때까지 호출 프로세스를 차단합니다. 선택적으로 시간 초과를 지정할 수 있습니다.

p = Process(target=print_numbers)
p.start()
p.join(2)  # Waits up to 2 seconds for the process to finish
로그인 후 복사

4. is_alive()

프로세스가 아직 실행 중이면 True를 반환합니다.

p = Process(target=print_numbers)
p.start()
print(p.is_alive())  # True if the process is still running
로그인 후 복사

5. 현재_프로세스()

호출 프로세스를 나타내는 현재 Process 개체를 반환합니다.

from multiprocessing import current_process

def print_current_process():
    print(current_process())

p = Process(target=print_current_process)
p.start()  # Prints the current process info
로그인 후 복사

6. 활성_어린이()

현재 살아있는 모든 Process 객체의 목록을 반환합니다.

p1 = Process(target=print_numbers)
p2 = Process(target=print_numbers)
p1.start()
p2.start()

print(Process.active_children())  # Lists all active child processes
로그인 후 복사

7. CPU_카운트()

머신에서 사용할 수 있는 CPU 수를 반환합니다.

from multiprocessing import cpu_count

print(cpu_count())  # Returns the number of CPUs on the machine
로그인 후 복사

8. 수영장

풀 개체는 여러 입력 값에 걸쳐 함수 실행을 병렬화하는 편리한 방법을 제공합니다. 작업자 프로세스 풀을 관리합니다.

from multiprocessing import Pool

def square(n):
    return n * n

with Pool(4) as pool:  # Pool with 4 worker processes
    result = pool.map(square, [1, 2, 3, 4, 5])

print(result)  # [1, 4, 9, 16, 25]
로그인 후 복사

9. 대기열

큐는 여러 프로세스가 서로 데이터를 전달하여 통신할 수 있도록 하는 공유 데이터 구조입니다.

from multiprocessing import Process, Queue

def put_data(q):
    q.put([1, 2, 3])

def get_data(q):
    data = q.get()
    print(data)

q = Queue()
p1 = Process(target=put_data, args=(q,))
p2 = Process(target=get_data, args=(q,))

p1.start()
p2.start()
p1.join()
p2.join()
로그인 후 복사

10. 잠금

잠금을 사용하면 한 번에 하나의 프로세스만 공유 리소스에 액세스할 수 있습니다.

from multiprocessing import Process, Lock

lock = Lock()

def print_numbers():
    with lock:
        for i in range(5):
            print(i)

p1 = Process(target=print_numbers)
p2 = Process(target=print_numbers)

p1.start()
p2.start()
p1.join()
p2.join()
로그인 후 복사

11. 값과 배열

값 및 배열 개체를 사용하면 프로세스 간에 간단한 데이터 유형과 배열을 공유할 수 있습니다.

from multiprocessing import Process, Value

def increment(val):
    with val.get_lock():
        val.value += 1

shared_val = Value('i', 0)
processes = [Process(target=increment, args=(shared_val,)) for _ in range(10)]

for p in processes:
    p.start()

for p in processes:
    p.join()

print(shared_val.value)  # Output will be 10
로그인 후 복사

12. 파이프

파이프는 두 프로세스 간의 양방향 통신 채널을 제공합니다.

from multiprocessing import Process, Pipe

def send_message(conn):
    conn.send("Hello from child")
    conn.close()

parent_conn, child_conn = Pipe()
p = Process(target=send_message, args=(child_conn,))
p.start()

print(parent_conn.recv())  # Receives data from the child process
p.join()
로그인 후 복사

13. 관리자

관리자를 사용하면 여러 프로세스가 동시에 수정할 수 있는 목록 및 사전과 같은 공유 개체를 만들 수 있습니다.

from multiprocessing import Process, Manager

def modify_list(shared_list):
    shared_list.append("New item")

with Manager() as manager:
    shared_list = manager.list([1, 2, 3])

    p = Process(target=modify_list, args=(shared_list,))
    p.start()
    p.join()

    print(shared_list)  # [1, 2, 3, "New item"]
로그인 후 복사

14. 세마포어

세마포어를 사용하면 리소스에 대한 액세스를 제어하여 한 번에 특정 수의 프로세스만 액세스하도록 허용할 수 있습니다.

from multiprocessing import Process, Semaphore
import time

sem = Semaphore(2)  # Only 2 processes can access the resource

def limited_access():
    with sem:
        print("Accessing resource")
        time.sleep(2)

processes = [Process(target=limited_access) for _ in range(5)]

for p in processes:
    p.start()

for p in processes:
    p.join()
로그인 후 복사

결론

Python의 다중 처리 모듈은 컴퓨터의 다중 프로세서를 최대한 활용하도록 설계되었습니다. Process를 사용한 프로세스 생성 및 관리부터 Lock 및 Semaphore를 사용한 공유 리소스 제어, Queue 및 Pipe를 통한 통신 촉진에 이르기까지 다중 처리 모듈은 Python 애플리케이션에서 작업을 병렬화하는 데 매우 중요합니다.

위 내용은 예제가 포함된 Python 다중 처리 모듈에 대한 빠른 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까? 중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까? Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법? 10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법? Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Inversiting.com의 크롤링 메커니즘을 우회하는 방법은 무엇입니까? Inversiting.com의 크롤링 메커니즘을 우회하는 방법은 무엇입니까? Apr 02, 2025 am 07:03 AM

Investing.com의 크롤링 전략 이해 많은 사람들이 종종 Investing.com (https://cn.investing.com/news/latest-news)에서 뉴스 데이터를 크롤링하려고합니다.

Python 3.6 피클 파일로드 오류 modulenotfounderRor : 피클 파일 '__builtin__'를로드하면 어떻게해야합니까? Python 3.6 피클 파일로드 오류 modulenotfounderRor : 피클 파일 '__builtin__'를로드하면 어떻게해야합니까? Apr 02, 2025 am 06:27 AM

Python 3.6에 피클 파일 로딩 3.6 환경 오류 : ModulenotFounderRor : nomodulename ...

SCAPY 크롤러를 사용할 때 파이프 라인 파일을 작성할 수없는 이유는 무엇입니까? SCAPY 크롤러를 사용할 때 파이프 라인 파일을 작성할 수없는 이유는 무엇입니까? Apr 02, 2025 am 06:45 AM

SCAPY 크롤러를 사용할 때 파이프 라인 파일을 작성할 수없는 이유에 대한 논의 지속적인 데이터 저장을 위해 SCAPY 크롤러를 사용할 때 파이프 라인 파일이 발생할 수 있습니다 ...

See all articles