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?

Mengapa saya mendapat 'RuntimeError: Percubaan untuk memulakan proses baharu sebelum proses semasa telah menamatkan fasa bootstrap' apabila menggunakan multiprocessing pada Windows?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-21 06:26:10546semak imbas

Why am I getting

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!

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