Mengapa Pemprosesan Berbilang Python Menyebabkan RuntimeError pada Windows Apabila Thread Diuruskan dalam Modul Berasingan?

Linda Hamilton
Lepaskan: 2024-11-15 08:33:02
asal
601 orang telah melayarinya

Why Does Python Multiprocessing Cause a RuntimeError on Windows When Threads Are Managed in a Separate Module?

Membetulkan RuntimeError pada Windows Semasa Menggunakan Python Multiprocessing

Python multiprocessing boleh menemui "RuntimeError" pada sistem Windows jika modul utama tidak betul dikonfigurasikan. Mesej ralat biasanya mencadangkan menggunakan fungsi "freeze_support()" untuk membetulkan isu ini. Walau bagaimanapun, mari kita menyelidiki senario tertentu di mana urutan diurus dalam modul berasingan, membawa kepada ralat yang sama.

Kod ini melibatkan modul utama ("testMain.py") yang mengimport proses pengendalian modul dan benang ("parallelTestModule.py") dan menggunakan kaedah "runInParallel"nya. Dalam "parallelTestModule.py," proses ditakrifkan dalam kelas "ParallelExtractor", yang memulakan proses menggunakan kelas "Proses" daripada modul "multiprocessing".

Inti masalah terletak pada kekurangan pengawal "jika nama == '__main__':" dalam modul utama ("testMain.py"). Pengawal ini memastikan bahawa subproses tidak mengimport modul utama secara rekursif. Apabila dilaksanakan pada Windows, subproses melaksanakan modul utama pada permulaan, menyebabkan gelung rekursif.

Untuk menyelesaikan isu ini, anda perlu memasukkan pengawal ini dalam modul utama ("testMain.py"):

import parallelTestModule

if __name__ == '__main__':
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)
Salin selepas log masuk

Dengan pengubahsuaian ini, modul utama akan bertindak sebagai titik masuk hanya apabila program dijalankan secara langsung, menghalang pelaksanaan rekursif subproses dan membenarkan multiprocessing berfungsi dengan betul pada Windows.

Atas ialah kandungan terperinci Mengapa Pemprosesan Berbilang Python Menyebabkan RuntimeError pada Windows Apabila Thread Diuruskan dalam Modul Berasingan?. 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