Rumah > Artikel > pembangunan bahagian belakang > Mengapa saya mendapat 'RuntimeError: Percubaan untuk memulakan proses baharu sebelum proses semasa telah menamatkan fasa bootstrap' apabila menggunakan multiprocessing pada Windows?
Ralat Multiprocessing Windows: RuntimeError
Apabila cuba menggunakan multiprocessing pada Windows, pengguna mungkin menghadapi ralat berikut:
RuntimeError: Attempt to start a new process before the current process has finished its bootstrapping phase.
Ralat ini timbul kerana subproses Windows mengimport modul utama semasa pemulaan, yang berpotensi membawa kepada penciptaan subproses rekursif. Untuk mengelakkan ini, adalah penting untuk memasukkan if __name__ == '__main__': pengawal dalam modul utama. Ini menghalang penciptaan subproses dari dalam modul utama.
Pertimbangkan coretan kod berikut, yang menunjukkan isu:
testMain.py:
import parallelTestModule extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
parallelTestModule.py:
import multiprocessing from multiprocessing import Process class ParallelExtractor: def runInParallel(self, numProcesses, numThreads): myprocs = [] for pid in range(numProcesses): pr = Process(target=self.runp, args=(pid, numThreads)) myprocs.append(pr) for i in myprocs: i.start() for i in myprocs: i.join()
Untuk menyelesaikan ralat ini , ubah suai skrip testMain.py untuk memasukkan if __name__ == '__main__': guard:
import parallelTestModule if __name__ == '__main__': extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
Pengubahsuaian ini memastikan bahawa subproses tidak dibuat secara rekursif, menyelesaikan RuntimeError pada mesin Windows.
Atas ialah kandungan terperinci Mengapa saya mendapat 'RuntimeError: Percubaan untuk memulakan proses baharu sebelum proses semasa telah menamatkan fasa bootstrap' apabila menggunakan multiprocessing pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!