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!