Rumah > pembangunan bahagian belakang > Tutorial Python > 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
Lepaskan: 2024-11-21 06:26:10
asal
615 orang telah melayarinya

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

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

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

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

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!

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