Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Saya Mendapat RuntimeError pada Windows Apabila Menggunakan Multiprocessing?

Mengapa Saya Mendapat RuntimeError pada Windows Apabila Menggunakan Multiprocessing?

Barbara Streisand
Barbara Streisandasal
2024-11-16 10:43:03657semak imbas

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

RuntimeError pada Windows Apabila Menggunakan Multiprocessing

Menghadapi "RuntimeError" semasa cuba menggunakan multiprocessing pada Windows menunjukkan kemungkinan isu dengan bootstrapping program fasa. Ralat ini biasanya berlaku apabila modul utama memulakan subproses tanpa menggunakan simpulan bahasa yang betul.

Untuk menyelesaikan masalah ini, pastikan modul utama menyertakan baris berikut sebelum melancarkan sebarang subproses:

if __name__ == '__main__':
    freeze_support()

Contoh Kod

Pertimbangkan coretan kod ringkas berikut yang cuba menggunakan berbilang pemprosesan dalam modul berasingan pada Windows:

testMain.py (Modul Utama)

import parallelTestModule

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

parallelTestModule.py (Modul Berasingan)

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()

Penyelesaian Gunaan

Untuk membetulkan RuntimeError pada Windows, tambah if name == '__main__': guard ke modul utama:

import parallelTestModule

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

Dengan melengkapkan perubahan ini, program akan mengendalikan subproses dengan betul seperti yang dimaksudkan tanpa mencetuskan RuntimeError .

Atas ialah kandungan terperinci Mengapa Saya Mendapat RuntimeError pada Windows Apabila Menggunakan Multiprocessing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn