Mengapa Saya Mendapat RuntimeError pada Windows Apabila Menggunakan Multiprocessing?

Barbara Streisand
Lepaskan: 2024-11-16 10:43:03
asal
551 orang telah melayarinya

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()
Salin selepas log masuk

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)
Salin selepas log masuk

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()
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan