> 백엔드 개발 > 파이썬 튜토리얼 > 다중 처리를 사용할 때 Windows에서 RuntimeError가 발생하는 이유는 무엇입니까?

다중 처리를 사용할 때 Windows에서 RuntimeError가 발생하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-16 10:43:03
원래의
649명이 탐색했습니다.

Why Am I Getting a RuntimeError on Windows When Using Multiprocessing?

멀티프로세싱을 사용할 때 Windows에서 RuntimeError

Windows에서 멀티프로세싱을 사용하려고 시도하는 동안 "RuntimeError"가 발생하면 프로그램의 부트스트래핑에 잠재적인 문제가 있음을 나타냅니다. 단계. 이 오류는 일반적으로 기본 모듈이 적절한 관용구를 사용하지 않고 하위 프로세스를 시작할 때 발생합니다.

이 문제를 해결하려면 하위 프로세스를 시작하기 전에 기본 모듈에 다음 줄이 포함되어 있는지 확인하세요.

if __name__ == '__main__':
    freeze_support()
로그인 후 복사

코드 예

Windows의 별도 모듈에서 다중 처리를 활용하려고 시도하는 다음의 단순화된 코드 조각을 고려하십시오.

testMain.py(주 모듈)

import parallelTestModule

extractor = parallelTestModule.ParallelExtractor()
extractor.runInParallel(numProcesses=2, numThreads=4)
로그인 후 복사

parallelTestModule.py(별도 모듈)

import multiprocessing
from multiprocessing import Process
import threading

class ThreadRunner(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.name = name
    def run(self):
        print(self.name, '\n')

class ProcessRunner:
    def runp(self, pid, numThreads):
        mythreads = []
        for tid in range(numThreads):
            name = "Proc-"+str(pid)+"-Thread-"+str(tid)
            th = ThreadRunner(name)
            mythreads.append(th) 
        for i in mythreads:
            i.start()
        for i in mythreads:
            i.join()

class ParallelExtractor:    
    def runInParallel(self, numProcesses, numThreads):
        myprocs = []
        prunner = ProcessRunner()
        for pid in range(numProcesses):
            pr = Process(target=prunner.runp, args=(pid, numThreads)) 
            myprocs.append(pr) 
        for i in myprocs:
            i.start()

        for i in myprocs:
            i.join()
로그인 후 복사

적용 솔루션

RuntimeError를 수정하려면 Windows에서는 기본 모듈에 if name == '__main__': 가드를 추가합니다.

import parallelTestModule

if __name__ == '__main__':
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)
로그인 후 복사

이 변경을 완료하면 프로그램이 RuntimeError를 발생시키지 않고 의도한 대로 하위 프로세스를 올바르게 처리합니다. .

위 내용은 다중 처리를 사용할 때 Windows에서 RuntimeError가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿