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

Barbara Streisand
Release: 2024-11-16 10:43:03
Original
551 people have browsed it

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

RuntimeError on Windows When Using Multiprocessing

Encountering a "RuntimeError" while attempting to use multiprocessing on Windows indicates a potential issue with the program's bootstrapping phase. This error typically occurs when the main module initiates subprocesses without using the proper idiom.

To resolve this problem, ensure that the main module includes the following line before launching any subprocesses:

if __name__ == '__main__':
    freeze_support()
Copy after login

Code Example

Consider the following simplified code snippet that attempts to utilize multiprocessing in separate modules on Windows:

testMain.py (Main Module)

import parallelTestModule

extractor = parallelTestModule.ParallelExtractor()
extractor.runInParallel(numProcesses=2, numThreads=4)
Copy after login

parallelTestModule.py (Separate Module)

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()
Copy after login

Applied Solution

To rectify the RuntimeError on Windows, add the if name == '__main__': guard to the main module:

import parallelTestModule

if __name__ == '__main__':
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)
Copy after login

By completing this change, the program will correctly handle subprocesses as intended without triggering the RuntimeError.

The above is the detailed content of Why Am I Getting a RuntimeError on Windows When Using Multiprocessing?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template